List在Java中被定义为一个接口,是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。
List有两个重要的实现类:ArrayList和LinkedList
ArrayList
由于是基于数组的集合,所以具备了一些数组的特征:
例如,初始化大小不指定,默认是10,当超过10的时候,自动扩容,默认1.5
int newCapacity = oldCapacity + (oldCapacity >> 1);
elementData = Arrays.copyOf(elementData,newCapacity(minCapacity));
搜索和读取数据很快,删除较慢(数据量大才有体现)
LinkedList
基于链表的结合,具备链表的一些特征,删除较快,搜索和读取较慢(数据量大才有体现)
List<String> arrayList1 = new ArrayList<>();
List<String> arrayList2 = new ArrayList<>(100);
List<String> arrayList3 = new ArrayList<>(arrayList2);
arrayList1.add("1");
arrayList1.add("a");
arrayList1.add(0,"b");
arrayList2.add("a2");
arrayList2.add("b2");
arrayList1.addAll(arrayList2);//
System.out.println(arrayList1.contains(1));//内部是通过equals方法遍历判断的
System.out.println(CollectionUtil.isEmpty(arrayList1));
System.out.println(CollectionUtil.isNotEmpty(arrayList1));
List<List<String>> partitionList = Lists.partition(arrayList1, 10);//new Lists.RandomAccessPartition(list, size)
// arrayList1.forEach(item -> {
// System.out.println(item);
// });
List<String> linkedList = new LinkedList<>();
List<List<String>> partitionList2 = Lists.partition(arrayList1, 10);// new Lists.Partition(list, size
// RandomAccess 支持随机访问的标识 ArrayList有,LinkedList没有,具体区别从下面方法可看出
//indexedBinarySearch for循环,根据角标匹配
Collections.binarySearch(arrayList1, "1");
//iteratorBinarySearch,迭代器遍历匹配
Collections.binarySearch(linkedList, "1");