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