ArrayList泛型结构
ArrayList是一种动态可伸缩的数组:
添加就会自动扩展,不需要预先指定空间,不会向传统数组造成空间浪费。
删除就会自动减少内存空间。
使用get获取指定下标的元素
使用remove删除指定下标的元素,删除后,后面的元素会自动向前移动
使用size查看泛型数组的长度
可以创建存放不同类型元素的泛型数组,在类有继承关系时,可以实现多态,父类数组可以存放子类元素。
public class Test{public static void main(String[] args){ArrayList<String> xx = new ArrayList<>();// 存放字符串类型的数组xx.add("aaa");xx.add("bbb");for(int i = 0 ;i <100;i++){xx.add(""+i);}String xx1 = xx.get(2);xx.remove(1);int num = xx.size();}
}
尖括号中只能使用引用类型。数组都是引用类型,基本类型的数组也可以放进去。
对于基本类型,使用对应的包装类。包装类用法和基本类型一样。可以认为是等价的。
一些等价的包装类。
int -- Integer
long -- Long
float -- Float
byte -- Byte
short -- Short
double -- Double
boolean -- Boolean
char -- Character
包装类也有 一些区别。
使用 == 时,包装类比较的指向是否相同。
对于数值型包装类,如果数值一样但是不在-128~127之间,则不是同一个对象。
ArrayList<Integer> ss2 = new ArrayList<>();
// 包装类比较数值大小时可以:if(ss2.get(2).intValue()==ss2.get(4).intValue()) {}
// 还可以:int n1 = ss2.get(2);int n2 = ss2.get(4);if(n1 == n2)
自定义泛型数组
// ArrayList2.java
package Abstract;public class ArrayList2<www> {private www[] arr = (www[]) new Object[10];private int flag=0;public void add(www w) {if(flag == arr.length) {www[] arrnew = (www[]) new Object[arr.length*2];for(int i = 0;i<arr.length;i++) {arrnew[i] = arr[i];}arr = arrnew;}arr[flag++] =w;}public www get(int index) {if(index <flag) {return arr[index];}else {return null;}}public void remove(int index) {for(int i = index;i<arr.length;i++) {arr[i] = arr[i+1]; }flag--;}public int size() {return flag;}}// Test.java
package Abstract;
import java.util.*;
public class Test{public static void main(String[] args){ArrayList2<String> mm = new ArrayList2<>();for(int i = 0 ; i<50;i++) {mm.add(""+i); }for(int i = 0;i<mm.size();i++) {if(i%6 ==0) {System.out.println();}System.out.println(mm.get(i));}}}