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
不是一下就找到的
增删快:直接找到要插入的前置节点和后置节点,来进行插入或删除,其他元素不用
。