List集合,是Collection的一个List实现接口,list集合是无序可重复集合。
ArrayList和LinkeLlist在list集合中的关系
ArrayList和LinkedList的关系:
ArrayList底层式基于数组的方式实现的,LinkedList底层是基于线性链表方式式实现的,ArrayList的查找元素快,增删慢,LinkedList查找慢,增删快。
两者之间底层实现图
测试性能
@Test
public void m2(){
List Ary = new ArrayList();
Ary.add(1,2);
System.out.println(Ary);
}
运行结果:
总结一下:
ArrayList和LinkedList都是有序可重复集合,里面添加的元素都是按照添加的顺序去存储的,并且都不可以在集合长度size()以外添加元素,否则会出现java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 警告,但是可以在集合末端连续添加元素。
比如以下方法就不会报错哦:
List Ary = new LinkedList();
Ary.add(1);
Ary.add(2);
Ary.add(3);
Ary.add(3,2);//add()方法是无返回值类型的方法
Ary.add(4,2);
Ary.add(5,2);
接下俩测试LinkedList的击中遍历方式:
- 1、新型for循环
- 2、普通fo循环
- 3、利用迭代器实现
- 4、利用JDK4.8工具箱里面提供的forEach()方法遍历集合元素
@Test
public void m3(){
List Ary = new LinkedList();
Ary.add(1);
Ary.add(2);
Ary.add(3);
Ary.add(3,"西瓜");//add()方法是无返回值类型的方法
Ary.add(4,"葡萄");
Ary.add(5,"柠檬");
System.out.println("---------普通for循环遍历---------------");
//普通for循环
for (int i = 0; i < Ary.size() ; i++) {
System.out.println("当前的元素是:"+Ary.get(i));
}
/**
* 测试一下转化成数组toArray()方法
*/
Object[] obj=Ary.toArray();
for (int i = 0; i<obj.length ; i++) {
System.out.println("当前的元素是:"+obj[i]);
}
System.out.println("---------新型for循环遍历集合---------------");
//新型for循环遍历集合
for(Object o:Ary){
System.out.println("当前的元素是:"+o);
}
System.out.println("---------利用迭代器循环---------------");
//利用迭代器循环
//先拿到当前集合的迭代器
Iterator iterator = Ary.iterator();
while(iterator.hasNext()){
System.out.println("当前的元素是:"+iterator.next());
}
Ary.forEach(e->{
System.out.println("当前的元素是:"+e);
});//函数式接口参能用lammada表达式
}
//测试LinkedList的遍历方式
@Test
public void m4(){
List Ary = new ArrayList();
Ary.add(1);
Ary.add(2);
Ary.add(3);
Ary.add(3,"西瓜");//add()方法是无返回值类型的方法
Ary.add(4,"葡萄");
Ary.add(5,"柠檬");
//迭代器原理遍历
System.out.println("-----------迭代器原理遍历----------");
//先拿到当前对象的迭代器
Iterator iterator = Ary.iterator();
while(iterator.hasNext()){
System.out.println("当前的元素是:"+ iterator.next());
}
//利用新型for循环
System.out.println("-----------利用新型for循环----------");
for(Object o:Ary){
System.out.println("当前的元素是:"+o);
}
//利用普通for循环
System.out.println("-----------利用普通for循环----------");
for (int i = 0; i < Ary.size(); i++) {
System.out.println("当前的元素是:"+Ary.get(i));
}
//转化为.toArray
Object[] A = Ary.toArray();
System.out.println(A[1]);
}