容器List学习
List分类
- ArrayList:底层采用数组,便于查找
- LinkedList:底层采用双向链表,便于插入
- Vector:底层也是采用数组,但是与ArrayList最大区别就是Vector的方法加了synchronized,是线程安全的(至于线程安全我们以后再了解)
ArrayList相关方法
public class ArraylistLearing {
public static void main(String [] args)
{
List<Integer> a=new ArrayList<Integer>(5); //初始化ArrayList,设置长度,但其实无所谓,因为其可以动态增加
System.out.print(a.size()+" "); //这个时候其实输出size为0
Integer [] num= {1,2,3,4};
a.add(1); //add方法
a.add(0,66); //可以在指定位置添加
a.addAll(Arrays.asList(num)); //addAll可以添加一连串的数据
a.addAll(1,Arrays.asList(num)); //指定位置添加
System.out.print(a.size()+" "); //这个时候输出size为6
System.out.print(a+" ");
System.out.print(a.get(2)); //a.get()方法得到指定位置的数据
a.set(1, 100); //a.set()修改指定位置的数据
a.remove(0); //a.remove()删除指定位置的元素
System.out.print(a+" ");
}
}
注意ArrayList中的细节:
-ArrayList是基于动态数组实现的,在增删时候,需要数组的拷贝复制。
-ArrayList的默认初始化容量是10,每次扩容时候增加原先容量的一半,也就是变为原来的1.5倍(所以我们设置初始容量就是避免多次扩容,会导致效率降低)
-删除元素时不会减少容量,若希望减少容量则调用trimToSize()
-它不是线程安全的。它能存放null值。
###Vector的相关知识
- 对于Vector,其基本方法与ArrayList类似,主要的一个不同就是,ArrayList是线程不安全的,而对于Vector是线程安全的
如果想要ArrayList实现同步,可以使用Collections的方法:List list=Collections.synchronizedList(new ArrayList(…));,就可以实现同步了 - ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍
LinkedList详解
LinkedList底层采用了双向链表,但其中还添加了一些可以用作栈或队列的方法。
LinkedList相关方法:
pets.getFirst() 获取列表中第一个元素
pets.element() 与上面一样
pets.peek()与上面一样
以上三个都可以获得第一列表中第一个元素
pets.remove()删去第一个元素 **注意**:并且返回这个元素
pets.removeFirst()与上面一样
pets.poll()实现栈的弹出 和上面功能一样
pets.pop()也是实现与上面一样的功能
当我们想要上去最后一个元素时,我们可以使用pets.removeLast()
pets.addFirst()
是向第一个位置前加元素
而对于pets.add(),pets.addLast(),pets.offer()
都是往最后添加元素