集合
所谓集合,就是来保存,装数据,也可称为容器类。
集合中的类在java.util包下。
Java的集合框架提供了操作一组数据的很多方法,这些方法可以直接调用。
在Java2的Collections框架中,主要包括4个接口及其扩展和实现类。
分类
Collection(一组对立的元素)
每个位置只能保存一个元素
-
List:可以重复元素的集合 -
Set:不允许重复的集合 -
Queue:保存队列先进先出的顺序
Collection
Collection是集合体系中最顶层、最基本的接口,可以使用foreach进行遍历,还有迭代器iterator()方法进行遍历。
Set
实现Collection接口,不能包含重复的元素。
equeals()方法:判断两个对象是否相同,新加入的元素和已有元素相比,返回false,否则拒绝添加。
HashSet
使用Hash算法来储存元素,具有良好的存取和查找性能。根据元素的Hashcode值决定元素在Hashset的位置。
LinkedHashSet
也是利用Hashcode决定元素储存位置,但是使用链表维护元素的次序。当遍历的时候,是按照插入的顺序遍历的。
LinkedHashSet需要维护元素的插入顺序,因此性能会略低于HashSet的性能,但是在迭代访问所有元素时性能很高。(链表适合遍历)
SortedSet
排序,插入的元素类型需要一样,否则会出现ClassCastException错误
TreeSet
SortedSet的实现类,保证元素处于排序状态
EnumSet
为枚举类设计的集合类
List
有顺序,可重复,因此可以通过索引来指定位置的集合元素
ArrayList
给予数组的List,封装了动态增长的Object[]数组
Vector
和ArrayList几乎一样,比较古老,线程安全
Stack
是Vector的子类,是栈的结构(后进先出)
LinkedList
实现List,Deque;实现List,可以进行队列操作,可以通过索引来随机访问集合元素;实现Deque,也可以当作双端队列,也可以当作栈来使用。
Queue(队列)
Queue内部是队列的数据结构(先进先出),新插入的元素会在尾部;插入之后,慢慢向顶部移动。
PriorityQueue(优先级队列)
除了实现Queue接口,PriorityQueue还对插入的元素进行重新排序
Deque
双端队列,Deque可以从两端来添加,删除元素,因此,Deque可以当作队列使用,也可以当作栈使用
ArrayDeque
给予数组的双端队列,和ArrayList类似,底层都是采用一个动态可分配的Object[]数组
Map(键值对)
可以通过键(key)来找值(value)
-
key:不允许重复 -
vlaue:储存方式类似List(可以重复,根据索引来查找)
Collection
定义了以下常用的方法:
-
boolean add(Object element):向集合中加入一个元素 -
boolean remove(Object element):删除集合中一个元素 -
int size():求集合的大小 -
boolean isEmpty():判断集合是否为空 -
boolean contains(Object element):判断集合是否存在元素某元素 -
Iterator iterator():返回集合的迭代子 -
Ojbect[] toArray():将集合转变为数组 -
void clear():清除集合中的元素 -
boolean addAll(Collection collection):将collection中的元素全部添加到集合里
Collection的实现类能够实现以下功能:
- 存放一个元素
- 增加/删除一个元素
- 查找一个元素是否在此集合中
- 计算此集合的元素数目
Iterator迭代
不论Collection的实际类型如何,他都支持一个iterator()方法,该方法返回一个迭代子,即对应的Iterator(实现类)对象,使用该迭代子即可逐一访问Collection中的每一个元素。
接口Iterator可实现对集合元素的遍历,有3个方法:
-
boolean hasNext():判断是否还有下一个元素 -
Object next():取得下一个元素 -
void remove():删除元素
使用迭代函数的步骤:
- 调用类集的
iterator()方法获得迭代子实例 - 建立一个调用
haxNext()方法的循环,只要hasNext()返回true,就进行循环迭代 - 在循环内部,通过调用
next()方法来得到每一个元素
一个例子:

for循环
从J2SE 5.0开始,可以不必使用iterator()了,使用增强的for循环可以直接遍历List所有元素。
就像这样

List
List接口定义可以重复的元素集合。
List是有序集合,继承了Collection接口并新增了下面一些方法:
-
public Object get(int index):返回指定位置的数组元素 -
public Object set(int index,Object element):设置指定位置的元素 -
public Object remove(int index):删除指定位置的元素 -
public int indexOf(Object o):查找o在List中出现的第一个位置 -
public int lastIndexOf(Object o):查找o在List中出现的最后一个位置 -
public List subList(int formIndex,int toIndex):返回子List -
public ListIterator listIterator():送回ListIterator迭代子
List接口主要以下实现类:
ArrayListLinkedListVector
List储存结构:
- 顺序储存:
ArrayList - 链式储存:
LinkedList
MAP接口
HashMap
HashMap类使用哈希算法实现Map接口。
HashMap类允许空key和空value,不保证元素的顺序。另外HashMap是线程不安全的。
构造函数:
-
HashMap():构造一个默认的HashMap -
HashMap(Map m):用m的元素初始化HashMap -
HashMap(int capacity):将HashMap的初始容量设置为capacity
常用方法:
-
V get(Object key):根据键得到值 -
V put(K key,V value):将键和值一起放入Map
来个HashMap例子:

Map迭代
-
Set<K> keySet():返回此HashMap中包含的键set视图 -
Collection<V> values():返回此HashMap中包含的值的collection视图 -
Set<Map.Entry<K,V>> entrySet():返回此HashMap的键和值的整体(Map.Entry)的set视图
Map.Entry()接口,表示键值对,有两种核心方法:
-
Object getKey():得到键值 -
Object getValue():得到Value值
例子:

Hashtable
Dictionary类提供了根据关键字查值的功能。Dictionary是一个abstract的类,因此不直接使用它。直接使用的一般是Hashtable类,Hashtable称为哈希表类,Hashtable也是一个键值对,和HashMap类似。
Hashtable有其独特的迭代方式:
如果要取得并显示哈希表中所有Values,用以下程序:
Enumeration enum = table.elements();
如果要取得并显示哈希表中所有关键字的值,用以下程序:
Enumeration enum1 = table.keys();
示范:

Hashtable和HashMap的区别:
-
Hashtable不允许null值(key和value都不行),HashMap允许null值 -
Hashtable的方法是同步的,HashMap未经同步,所以很多线程场合要手动同步 -
Hashtable除了使用Iterator迭代,还可以使用Enumeration。HashMap不能用Enumeration
Properties
Hashtable(哈希表)里存的关键字/值对可以是各种类型。而Properties就相对简单多,因为它只存放字符串对。
Properties用setProperty()和getProperty()方法来处理值,值只能是String。
常用方法:
-
load(InputStreaminStream):从流中读取属性列表 -
Enumeration propertyName():返回所有的键 -
public String getProperty(String key):根据键获得值 -
public Object setProperty(String key,String value):将键和值加入Properties
Collections工具类
Collections类中定义了集合操作的相关算法。
排序
List中的对象必须实现Comparator接口,或者显式制定一个比较器。
采用的方法:
-
sort(List list):对List排序,按照自然顺序排 -
sort(List list,Comparatore c):对List进行排序,按照Comparator对象c中定义的规律排
查找
binarySearch(List list.Object key)-
binarySearch(List list,Object key,Comparator c)
找出集合中的最大值、最小值