先来看看Collection,List,ArrayList,LinkedList它们之间的关系
Collection/Iterable/List都是接口。
List是有序的可重复的,这一点可以从官方文档中得出。
List是一种有序的集合 An ordered collection (also known as a sequence) 与sets不同,list的元素可以重复 Unlike sets, lists typically allow duplicate elements.
创建一个list对象并给这个list添加元素。
因为List是接口,所以要用实现这个List接口的类ArrayList来创建对象。
@Test public void listTest() { List<String> list=new ArrayList<>(); list.add("Welcome"); list.add("to"); list.add("java"); System.out.println(list); } }
结果:注意,虽然直接把list变量名称写进了System.out.println(list),但实际输出的却是我们通过add方法创建的List。
而不是list的引用地址,由此可见list默认调用了toString方法.
[Welcome, to, java]
ArrayList
ArrayList底层是用数组来实现存储的,特点:查询效率高,增删效率低,线程不安全。
与之对应的LinkedList:查询效率低,增删效率高,线程不安全。
为什么ArrayList的增加删除效率低呢?因为它的底层是通过copy数组的方式来达到增加删除的。
比如,ArrayList要删除下面数组中的3,它会把4移到3,5移到4.
[1,2,3,4,5]