集合相关
1、基本概述
Java.util包提供了一些集合类,这些集合类又被成为容器。集合和数组的区别在于集合的长度是可变的,数组的长度固定;集合用来存放对象的引用。常用集合有List、Set、Map,集合类继承关系如图1,java提供了相应的方法来对集合进行遍历、增删改查。
图1
2、主要操作
(1)Collection接口(Collections是工具类用于操作集合类):
Collection接口是层次结构中的根接口,通常不能直接使用。由于List和Set集合继承了Collection接口,因此Collection提供的方法对其是通用的。Collection常见方法如图2所示。
遍历集合一般有3种方法:
第一种---使用迭代器(Iterator),该方式在执行循环过程中会进行数据锁定,性能稍差。在遍历过程中删除元素只能用迭代器的remove方法而不能用集合的remove方法,否则会出现并发访问的错误。Iterator的next()方法返回的是Object,注意强制转换。
第二种--增强型for循环,内部实现也是用的迭代器。
第三种--普通的for循环,内部不锁定,效率高,多线程时要考虑并发问题。
(2)List集合
List集合包括List接口及其实现类。List集合中的元素允许重复且有序。List接口除了包含Collection中的方法外,List接口还定义了2个非常重要的方法:
get(int index):获取指定索引位置的元素.
set(int index,Object obj):将集合中指定索引位置的对象修改为指定的对象。
List接口的常用实现类有ArrayList和LinkedList.
ArrayList类实现了可变的数组,允许保存所有元素,包括null。可根据索引位置对集合进行快速访问,缺点是向指定索引位置插入或删除对象的速度较慢。线程不同步
LinkedList类采用链表结构保存对象,保存所有元素。这种结构的优点是便于向集合中插入和删除对象,但随机访问集合中的对象效率比ArrayList低。(集合为空表示没有元素,为null表示对象不存在)
Vector:(JDK1.0版本出现的) 底层是数组数据结构,线程同步,被ArrayList替代了.(已经不用了)
3)Set集合
Set集合包括Set接口及其实现类。Set集合不可重复且无序。常用的实现类有HashSet和TreeSet。
HashSet实现了Set接口由哈希表支持,允许使用null元素。
TreeSet不仅实现了Set还实现了java.util.SortedSet接口。因此TreeSet按照自然顺序递增排序,当然也可以按照指定的比较器排序。
(4)Map集合
Map集合以键值对的形式存储数据,不能包含相同的Key,每个Key只能映射一个Value。
遍历map集合的三种方法:
通过Map.entrySet遍历key和value;
通过Map.keySet遍历key;
通过Map.values遍历value
集合有序重复见图3: