日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

arraylist扩容是创建新数组吗 java_Java编程之数组扩容

發布時間:2025/3/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arraylist扩容是创建新数组吗 java_Java编程之数组扩容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、背景

數組在實際的系統開發中用的越來越少了,我們只有在閱讀某些開源項目時才會看到數組的使用。在Java中,數組與List、Set、Map等集合類相比,后者使用起來方便,但是在基本數據類型處理方面,數組還是占優勢的,而且集合類的底層也都是通過數組實現的。

我們大家都知道,在Java中數組是定長的,一旦初始化以后,就不可以改變其長度,而這在實際應用中是不方便的。舉例來說,如果要對班級學生的信息進行統計,因為我們不知道一個班級會有多少學生(隨時有入學、退學、轉學的學生),所以需要一個足夠大的數組來容納所有的學生(當然,在實際應用場景中,你可以用List或者其他的集合類,本文在此只討論數據)。那么,究竟需要多大才算足夠大呢?事實上,“足夠大”只是一個相對的概念,并沒有確定的值。所以,當“足夠大”變成“足夠小”的時候,就會超出數組的最大容量,如何解決呢?那就給數組擴容吧,也許看到此處的朋友會問,你這不是和前面所說的矛盾么?請不要糾結,我這里所說的給數組擴容,只是“婉轉”地給數組擴容。那么,怎么個“婉轉”擴容呢?還是從例子說起。

二、實例展示

假設一個班級最初規定只能容納60個學生,但是由于有幾個轉學的學生突然插進來,整個班級的學生人數達到了80人,這種情況很正常呢,想想我們高中所在的那些強化班就知道是怎么回事了。

第一,先定義一個學生的屬性類:Student

public class Student {

/**

* 學生編號

*/

private long studentId;

/**

* 學生姓名

*/

private String name;

/**

* 學生年齡

*/

private int age;

/**

* 學生性別:0-男,1-女

*/

private int gender;

/**

* 學生所在班級

*/

private String ownerClass;

public long getStudentId() {

return studentId;

}

public void setStudentId(long studentId) {

this.studentId = studentId;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public int getGender() {

return gender;

}

public void setGender(int gender) {

this.gender = gender;

}

public String getOwnerClass() {

return ownerClass;

}

public void setOwnerClass(String ownerClass) {

this.ownerClass = ownerClass;

}

}

第二、編寫給數組擴容的工具類:ArrayExtendCapacityUtil

public class ArrayExtendCapacityUtil {

/**

* 將數組進行擴容

*

* @param datas

* @param newLen

* @return

*/

public static T[] extendCapacity(T[] datas, int newLen){

//負值校驗

newLen = newLen < 0 ? 0 : newLen;

//生成一個新的數組,并copy原來的值

return Arrays.copyOf(datas, newLen);

}

}

第三、編寫測試類:ArrayExtendCapacityMain

import java.util.ArrayList;

import java.util.List;

public class ArrayExtendCapacityMain {

public static void main(String args[]){

//一個班規定60個學生

Student[] num = new Student[60];

System.out.println("初始化:" + num.length);

System.out.println("最后一個學生的編號:" + converData(num.length).get(num.length-1).getStudentId());

//增加20個學生

num = ArrayExtendCapacityUtil.extendCapacity(num, 80);

System.out.println("擴容后:" + num.length);

System.out.println("擴容后最后一個學生的編號:" + converData(num.length).get(num.length-1).getStudentId());

}

private static List converData(int capacity){

List students = new ArrayList();

for(int i=0;i

Student student = new Student();

student.setStudentId(i);

student.setName(i+"-King");

student.setAge(i+10);

student.setGender(i % (i+10) == 0 ? 0 : 1);

student.setOwnerClass(i + "-class");

students.add(student);

}

return students;

}

}

三、測試結果

初始化:60

最后一個學生的編號:59

擴容后:80

擴容后最后一個學生的編號:79

四、測試結果分析

本文實例中采用的是Arrays數組工具類的copyOf方法,產生了一個newLen長度的新數組,并把原來的值拷貝進去,然后就可以對超長的元素進行賦值。

通過這樣的方式,曲折地解決了數組的變長問題。其實,集合的長度自動維護功能的原理與此類似,在實際開發中,如果確實需要變長的數據集,數組也是在考慮范圍之內的,不能因為數組是固定長度就將其否定。在這里,我可以直接借用一個結論:對基本數據進行求和計算時,數組的效率是集合的10倍。有興趣的朋友可以自己證明一下這個結論。

總結

以上是生活随笔為你收集整理的arraylist扩容是创建新数组吗 java_Java编程之数组扩容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。