List 容器
ArrayList
使用Object[] 数组存储对象
//定义一个只能存放String的ArrayList,此时没有传参数,strings的容量为 0
ArrayList<String> strings = new ArrayList<>();
//添加对象之前会保证容器的容量足够大,如果不够就会进行扩容操作(如果构造器未传参数,默认扩容为容量10,否则新容量 新容量 = 老容量 + (老容量>>1),默认最大容量是 Integer.MaxValue-8,但是还可以再多8,达到MaxValue)
strings.add("a");
//删除对应下标的元素, 从删除下标开始到数据结尾 整体向前复制
strings.remove(1);
//自定义排序,匿名内部类 实现Comparator接口
strings.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);//如果o1 的字典序 小于 o2 的字典序 则返回-1 (o1.string - o2.string)
}
});
//遍历方式 1.
for(String string:strings){
System.out.println(string);
}
//遍历方式 2.
for (int i = 0 ;i<strings.size();i++){
System.out.println(strings.get(i));
}
//遍历方式 3.
for (Iterator<String> iterator = strings.iterator(); iterator.hasNext();){
System.out.println(iterator.next());
}
LinkedList
使用内部类Node 存储对象
LinkedList<String> strings = new LinkedList<>(); //存储Node节点,双向链表 有节点 first 和 last
strings.add("a1");//尾插法
strings.addFirst("a0"); //头插法
strings.remove(0); //删除一个节点 (从头或尾 接近的一端开始找节点)
//自定义排序
//List接口的默认方法,转换成Object[]数组,排序后通过 "list迭代器赋值"
strings.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
vector
vector 容器与 ArrayList 类似,内部使用Object[ ] 存储数据
不同的是
- ArrayList每次扩容 new = old + (old>>1),Vector 扩容 new = old + incr==0? old : incr (incr 是实例化时的增长容量)
- Vector 内部某些增删改方法使用 synchronized 关键字修饰,是线程安全的,但是会影响操作效率。