- 末尾增:
- 随机增:
- 删:
- 改:
- 查:
代码:
public static void main(String[] args) {
List<Integer> al = new ArrayList<>();
for (int i = 0; i < 10; i++) {
al.add(new Random().nextInt(100));
}
PrintUtil.printCollection(al, "init list al");
//末尾增
al.add(100);
PrintUtil.printCollection(al, "method add test add(100)");
//随机增
al.add(3, 99);
PrintUtil.printCollection(al, "insert(al.add(3,99)) into indexof 3 value = 99");
int temp = al.get(3);
//删
al.remove(al.get(3));
PrintUtil.printCollection(al, "remove(al.remove(" + temp + ") indexof 3 value = " + temp);
temp = al.get(3);
al.remove(3);
PrintUtil.printCollection(al, "remove(al.remove(3) indexof 3 value = " + temp);
//改
al.set(3, 66);
PrintUtil.printCollection(al, "update(al.set(3,66)) indexof 3 value = 66 ");
PrintUtil.printSpilt('-');
ArrayList<Integer> al2 = new ArrayList<>();
al2.addAll(al);
PrintUtil.printCollection(al2, "al2 addAllOf al print al2");
al2.addAll(3, al);
PrintUtil.printCollection(al2, "al2 addAllOf al from indexOf 3 to al2 print al2");
PrintUtil.printSpilt('-');
al2.clear();
PrintUtil.printCollection(al2, "al2.clear() print al2, empty expected");
PrintUtil.printSpilt('-');
PrintUtil.printCollection(al, "print al");
PrintUtil.printInfo("result with iterator");
for (Iterator it = al.iterator(); it.hasNext(); ) {
System.out.print(it.next() + " ");
}
}
结果:
- iterator() 只读
- listIterator()可读可写
for (ListIterator<Integer> lit = al.listIterator(); lit.hasNext(); ) {
/*nextIndex的值可能越界为size,实际上hasNext为true的最大下标为size-1
nextIndex @return cursor
previousIndex @return cursor - 1*/
/*System.out.println(lit.nextIndex());
lit.next();*/
int data = lit.next();
if (data > 90) {
lit.set(0);
} else if (data < 30) {
//指针前面加入
lit.add(999);
} else if (data >= 60 && data < 70) {
lit.remove();
}
}
System.out.println(al);
优点:
1、根据下标遍历元素效率较高。
2、根据下标访问元素效率较高。
3、在数组的基础上封装了对元素操作的方法。
4、可以自动扩容。
缺点:
1、插入和删除的效率比较低。
2、根据内容查找元素的效率较低。
3、线程不安全
扩容规则:每次扩容现有容量的50%。