Java集合---List、Set、Iterator、Map简介
1、List集合
1.1概念
List继承自Collection接口。List是一种有序集合,List中的元素可以根据索引(顺序号:元素在集合中处于的位置信息)进行取得/删除/插入操作。
跟Set集合不同的是,List允许有重复元素。对于满足e1.equals(e2)条件的e1与e2对象元素,可以同时存在于List集合中。当然,也有List的实现类不允许重复元素的存在。同时,List还提供一个listIterator()方法,返回一个ListIterator接口对象,和Iterator接口相比,ListIterator添加元素的添加,删除,和设定等方法,还能向前或向后遍历,具体的方法往下看。List接口的实现类主要有ArrayList,LinkedList,Vector,Stack等。
1.2 ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
1.2.1 ArrayList与Vector的区别
ArrayList | Vector | |
性能 | 采用异步处理方式,性能高 | 采用同步处理方式,性能低 |
线程安全 | 非线程安全 | 线程安全,需要线程安全时使用 |
1.2.2 主要方法
- public boolean add(Object?o):添加元素
- public void add(int index, Object element):在指定位置添加元素
- public Iterator iterator():取得Iterator对象便于遍历所有元素
- public Object get(int?index):根据索引获取指定位置的元素
- public Object set(int index,Object element):替换掉指定位置的元素
1.2.3 排序方法
- Collections.sort(List list):对List的元素进行自然排序
- Collections.sort(List list, Comparator comparator):对List中的元素进行客户化排序
1.3 LinkedList类
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
2、Set集合
Set接口中不能加入重复元素,但是可以排序。
Set接口常用子类
散列排序:HashSet,不能排序,存入便打乱数据
有序排序:TreeSet,可以排序,存入便自动排序
3、Iterator(迭代器)
集合输出的标准操作。标准做法,使用iterator
3.1 操作原理
Iterator是专门的迭代输出接口,迭代输出就是想元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出
使用方法:Iterator iter = list.iterator();
注:iterator使用remove时,不能通过list等集合删除元素
4、Map
4.1 常用方法
map.contains(“key”)判断key是否存在
map.containsValue(“值”)判断值是否存在
map.keySet();获取所有key的集合:Set集合
map.values();获取所有值的集合:Collection集合