Collection接口是Java中所有集合的总接口,Collection将集合划分为两大类:List集合和Set集合。

1.List接口

List集合的特征:

1).有序的,添加时保存的数据一致;

2).可以重复。

List接口下面常用的方法:

增加:add(int index,E e); 在指定位置添加指定的数据

addAll(int index, Collection<? extends E> c);在指定位置存入另一个集合

删除:remove(int index); 通过索引删除指定的元素,并返回删除的元素

修改:set(int index);在指定位置替换指定的元素,并返回被替换的元素

查找:get(int index); 通过索引将指定元素取出来

int indexOf(Object o);查找指定元素第一次下标,没有这个元素返回-1

int lastIndexOf(Object o);查找指定元素的最后一次下标

           List<E> subList(int startIndex; int  endIndex);从集合中截取一部分,要头不要尾

示例
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(12);
list.add(13);
list.add(1, 20);
System.out.println(list);
List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list.addAll(1, list1);
System.out.println(list);


System.out.println(list.remove(0));
System.out.println(list.set(0, 30));
System.out.println(list);

2.List的子类

1)ArrayList集合

ArrayList集合数据存储的结构是Object数组。增加删除数据时,可能牵涉到数组的扩容、复制以及元素的整体移动等,效率慢;但可以通过数组名和索引直接定位查找元素,所以查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

示例

public class Test {
public static void main(String[] args) {
ArrayList<String> list  = new ArrayList<String>();
list.add("哈哈");
list.add("嘿嘿");
list.add("呵呵");
System.out.println(list);
//把单个取出来
System.out.println(list.get(1));
//遍历数据
//增强for循环
for (String string : list) {
System.out.println(string);
}
//for循环遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//迭代器进行遍历
//
ListIterator< String> iterator = list.listIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
        }

    }

}

2)LinkedList集合

LinkedList集合数据存储的结构是双向链表结构。方便元素添加,删除,直接找到要插入的前置节点和后置节点来进行插入和删除;查找慢,因为底层采用二分法的查找算法。

3.ArrayList和LinkedList的区别

ArrayList有一些特征:
增加数据,删除数据 效率慢:
1.可以会涉及到数组的扩容,牵涉到数组的复制问题
2.增加数据或者删除数据的时候,可能牵涉到数组的数据整体右移或者左移
查询快:底层是数组,一般使用数组名字 + 索引进行直接定位


LinkedList 底层是双向链表,并且实现了一个接口队列(先进先出)Deque
查找慢:因为底层是采用的二分法查找的算法 时间复杂度是n/2   不是一下就找到的
增删快:直接找到要插入的前置节点和后置节点,来进行插入或删除,其他元素不用。