一、List接口是collection接口的一个子接口,有序的、可以重复的集合
*
-
面试题:ArrayList、LinkedList、Vector
-
相同点:
-
1.都是list集合的实现类
-
2.存储数据的特点相同:有序的、可重复的
-
不同点
- –ArrayList:主要实现类,底层就是数组 Object[] elementData,,线程不安全,查询速度比较快
-
--LinkedList:底层是使用双向链条的形式进行存储的,添加、删除速度高
-
--Vector:是list接口的古老实现类,线程安全的,效率比较低,Object[] elementData
- ArrayList底层实现
- List list=new ArrayList();//并且对数组 Object[] elementData进行了初始化,初始化为{}
- list.add(1);//第一次调用add方法,底层对数组长度进行了指定,指定为10
- 如果添加的新元素导致数组elementData容量不够,进行了扩容,扩容了1.5倍,
- 同时将原数组的元素值复制到了扩容后的新数组里面
- LinkedList
- List list=new LinkedList():在内部声明了Node类型的first和last属性值,默认为null
- list.add(1); //调用add方法,把1封装到node中,创建了Node对象
- node的定义为:
- Node(Node prev, E element, Node next) {
this.item = element;
this.next = next;
this.prev = prev;
}
Vector:在调用无参构造方法Vector()的时候,底层创建了一个长度为10的数组
它扩容的是2倍
// void add(int index, Object ele):根据坐标index把元素添加到指定的位置
// boolean addAll(int index, Collection eles):根据坐标index把集合中所有的元素值添加到指定的位置
// Object get(int index):根据索引值查询对应的元素
// int indexOf(Object obj):查询元素obj第一次出现的索引值,如果找不到返回-1
// int lastIndexOf(Object obj)
// Object remove(int index):根据索引值删除该元素
// Object set(int index, Object ele):根据索引值修改元素
增删改 查 size()方法
*/
public class TestList {
@Test
public void test(){
List list=new ArrayList();
//1.添加元素
list.add("aaa");
list.add("bbb");
list.add(123);
list.add("bbb");
System.out.println(list);
//将元素添加到指定位置
list.add(0,110);
System.out.println(list);
//查询索引是2的元素值
System.out.println(list.get(2));
//修改
list.set(0,"hehe");
System.out.println(list.get(0));
//删除
list.remove(0);
System.out.println(list);
//indexOf():
System.out.println(list.indexOf("bbb"));
//最后一次出现的位置
System.out.println(list.lastIndexOf("bbb"));
}
@Test
public void test1(){
List list=new ArrayList();
//1.添加元素
list.add("aaa");
list.add("bbb");
list.add(123);
list.add("bbb");
System.out.println("=============1.迭代器");
Iterator i=list.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
System.out.println("=============2.增强for");
for(Object o:list){
System.out.println(o);
}
System.out.println("=====3.for循环");
for(int a=0;a<list.size();a++){
System.out.println(list.get(a));
}
System.out.println("===4.转成数组,建议不要这么做");
}
}