Java集合(本篇主要介绍List接口)
*集合:集合和数组一样,都是容器,都可以存放程序运行过程中的数据。但是,集合的长度是可变的,集合可以存放基本数据类型,也可以存放引用数据类型。而且集合的存储方式多种多样(数据结构)。
Collection:是集合类的顶级接口,继承自它的接口主要有LIist接口和Set接口,而Map接口可以产生集合。
Collections:是帮助类,提供了常用的方法。
常用API:java.util* List Collection Map Set
List:有序集合,可以通过下标访问集合中的元素。
允许重复值,允许有多个null值
在搜索指定对象时,开销较大,但在删除添加对象时较为高效。
List的常用操作:
add(E e):将指定元素添加到列表的尾部
add(Index ,e):将指定元素添加到指定位置
clear()移除此列表中的所有元素
ensureCapacity
(int minCapacity):
增加容器的容量
isEmpty():判断集合是否为空
remove(index) 移除此列表中指定位置上的元素。
get(index):返回此列表中的所有元素
remove(Object o)移除此列表中首次出现的元素
set(index,e)用指定元素代替指定位置上的元素
toArray():按适当顺序返回包含此列表所有元素的数组
containsAll(Collection<?> c) 如果collection包含指定collection中的所有元素,则返回 true。
retainAll(Collection<?> c) 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)保留交集
ArrayList:具有List集合的基本特性,是一个大小可变的数组。
底层实现是数组结构,可以通过下标来访问。
有序集合(存入与取出的顺序相同)
允许重复值,允许有多个null值
每个ArrayList实例在初始化时,都有一个初始容量,大小为10.
若要添加大量的数据时,最好先调用ensureCaptity()来改变容器的初始容量。
查询速度快 get set
线程不同步,线程不安全,但是高效
package com.itycl.array; import java.util.ArrayList; import java.util.Iterator; import java.util.List;
public class ArrayListDemo { public static void main(String[] args) { List<String> list=new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e");
Iterator it=list.iterator(); while(it.hasNext()) { String str = (String) it.next(); System.out.println(str); } } } |
LinedList:具有List集合的基本特性
底层实现是链表结构,同时支持堆,栈,队列
LinkedList具有好几套方法可供使用
允许重复值,允许null值
增删操作快add remove
线程不同步,线程不安全,但是高效
public class LinkedListDemo { public static void main(String[] args) {
LinkedList<Integer> list=new LinkedList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.addFirst(0); ListIterator it=list.listIterator(); while(it.hasNext()) { Integer value = (Integer) it.next(); if(4==value) { it.add(5); } } System.out.println(list);//0,1,2,3,4,5
list.removeLast(); System.out.println(list);//0,1,2,3,4
list.push(1);//在列表的首部添加元素 System.out.println(list);//1,0,1,2,3,4
list.pop();//在列表的首部开始删除一个元素 System.out.println(list);//0,1,2,3,4
list.peekFirst();// 获取但不移除此列表的第一个元素 System.out.println(list);//0,1,2,3,4
list.peekLast();// 获取但不移除此列表的最后一个元素 System.out.println(list);//0,1,2,3,4
list.pollFirst();// 获取并且移除此列表的第一个元素 System.out.println(list);//1,2,3,4
list.pollLast();// 获取并且移除此列表的最后一个元素 System.out.println(list);//1,2,3
} } |
Vector:同步,可变数组。
实现了RandmoAccess接口,即提供了随机访问功能
线程安全,效率低。