java数组中最常用的一种,构造方法有三种.
- ArrayList(int init) :init不赋值时构造一个空数组,默认容量大小为10. 否则容量大小为init.
- ArrayList(Collection<? extends E> c):用Collection来构造数组
ArrayList的方法(较为常规的就不提及了)
- boolean add(int index, E element) :在指定位置添加一个元素,不指定就在末尾添加。
- boolean addAll(int index, Collection<? extends E> c) 在指定位置添加一个collection
- clear() 清空list
- Object clone() 对原来的ArrayList进行浅层复制。
具体参考Java里的浅拷贝和深层拷贝区别(shadow copy, deep copy)) - forEach() 遍历arrayList里的每个元素,对for循环的简写,forEach有点像python里面的lamda
正常的for循环
ArrayList a = new ArrayList();
a.add(1);
a.add(2);
for(Object item : a){
System.out.println((int)item);
}
List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
//lambda
//Output : A,B,C
items.forEach(item->System.out.println(item));
//Output : C
items.forEach(item->{
if("C".equals(item)){
System.out.println(item);
}
});
- Iterator<E> iterator()
ArrayList<String> list = new ArrayList<String>();
list.add("C");
for(Iterator it2 = list.iterator();it2.hasNext();){
System.out.println(it2.next());
}
- List<E> subList(int fromIndex, int toIndex) :返回一个子List
这个方法也用到了浅层copy,copy了子序列赋给一个新的序列。
ArrayList<Integer> a = new ArrayList<Integer>();
a.add(1);
a.add(2);
ArrayList<Integer> b =new ArrayList<Integer>(a.subList(0, 1));
a.set(0, 10000);
System.out.println(a.get(0)); //print 10000
System.out.println(b.get(0)); //print 1 没跟着改变
ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();
ArrayList tmp1 = new ArrayList();
tmp1.add(1);
tmp1.add(2);
a.add(tmp1);
ArrayList<ArrayList<Integer>> b =new ArrayList<ArrayList<Integer>>(a.subList(0, 1));
tmp1.set(0, 10000);
System.out.println(b);
System.out.println(a.get(0).get(0)); //print 10000
System.out.println(b.get(0).get(0)); //print 10000 跟着改变了