在Java的Collection中,有两个接口List和Set方法,本文主要描述List接口的相关知识。
1.特性
List接口用于存储有序的可重复的数据,可以看作是“动态数组”;
这里的动态可以理解为,长度可变;
2.实现类
2.1ArrayList(主要实现类)
ArrayList是Java1.2之后的主要实现类,1.2之前是Vector;
ArrayList作为主要实现类,它的特性有以下几个:
- 线程不安全;
- 底层使用Object[]存储;
- 插入删除元素时复杂度是O(n);
- 查询元素复杂度O(1);
2.2Vector(古老实现类)
特性:
- 线程安全
- 底层也是采用Object[]存储;
2.3LinkedList
特性:
- 底层采用双向链表的方式进行存储
- 线程不安全
- 删除插入操作的时间复杂度O(1)
- 查找O(n)
面试题:
- ArrayList和Vector的区别:主要是线程安全和不安全;
- ArrayList和LinkedList的区别:主要是底层存储的区别;
3.常用方法
3.1增
add(Object obj);
addAll(Collection coll);
List list=new ArrayList();
list.add("AA");
list.add(123);//自动装箱
list.add(new Person("name",20));
list.size();//3
List list=new ArrayList();
list.add(45);
List list1=new ArrayList();
list1.add(2);
list1.add("DD");
list.add(list1);
list.size();//2
list.addAll(list1);
list.size();//3
//list是45,2,“DD”
值得注意的是:
- 在使用add(Object obj)时,可以直接将基本数据类型作为参数,会自动装箱;
- 在使用add(Collection coll)时,参数中的Connection对象是被看作一个对象添加到list中;
3.2删
remove(Object obj);
remove(int index);
这两个方法最大的区别在于参数类型不同;
List list=new ArrayList();
list.add("AA");
list.add(123);//自动装箱
list.add(new Person("name",20));
list.size();//3
list.remove(123);//AA,new Person的地址
list.remove(0);//123,new Person的地址
这里的第一个remove是Collection中的,由于List是有序的,因此引入了使用索引删除的第二个remove方法;
3.3改
set(int index,Object obj);
List list=new ArrayList();
list.add("AA");
list.add(123);//自动装箱
list.add(new Person("name",20));
list.size();//3
list.set(0,"BB");//BB,123,new Person的地址
把索引为index的元素改成obj;
3.4查
get(int index);
List list=new ArrayList();
list.add("AA");
list.add(123);//自动装箱
list.add(new Person("name",20));
list.size();//3
list.get(0);//AA
获取索引为index的元素;
3.5插
add(int index,Object obj);
addAll(int index,Collection coll);
List list=new ArrayList();
list.add("AA");
list.add(123);//自动装箱
list.add(new Person("name",20));
list.size();//3
list.add(1,"BB");//AA,BB,123,地址
List list=new ArrayList();
list.add(45);
list.add("AA");
list.add("BB");
List list1=new ArrayList();
list1.add(2);
list1.add("DD");
list.add(1,list1);//45,2,DD,AA,BB
这里的add(int index,Collection coll)方法添加的对象也被看做是一个;
3.6遍历
- iterator()迭代器;
- 增强for循环;
- 一般for循环;
List list=new ArrayList();
list.add("AA");
list.add(123);//自动装箱
list.add(new Person("name",20));
Iterator iterator=list.iterator();
while(iterator.hasNext()){
iterator.next();//遍历
}
List list=new ArrayList();
list.add("AA");
list.add(123);//自动装箱
list.add(new Person("name",20));
for(Object obj : list){
System.out.println(obj);
}