背景
所有集合类都位于java.util包下。集合中只能保存对象(保存对象的引用变量)。当我们把一个对象放入集合中后,系统会把所有集合元素都当成object类的实例进行处理。
java的集合类主要由两个接口派生而出:collection和map,collection和map是java集合框架的根接口,这两个接口又包含了一些接口或实现类。
set和list接口是collection接口派生的两个子接口,queue是java提供的队列实现,类似于list。
map实现类用于保存具有映射关系的数据(key-value)。
set、list和map可以看做集合的三大类。
list集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。
map集合中保存key-value对形式的元素,访问时只能根据每项元素的key来访问其value。
接口
实现
历史集合类
set
hashset
treeset
list
arraylist
vector
linkedlist
stack
map
hashmap
hashtable
treemap
properties
collection
collection接口支持如添加和除去等基本操作。设法除去一个元素时,如果这个元素存在,除去的仅仅是集合中此元素的一个实例。
boolean add(object element)
boolean remove(object element)
int size()
boolean isempty()
boolean contains(object element)
iterator iterator()
boolean containsall(collection collection)
boolean addall(collection collection)
void clear()
void removeall(collection collection)
void retainall(collection collection)
containsall() 方法允许您查找当前集合是否包含了另一个集合的所有元素,即另一个集合是否是当前集合的子集。其余方法是可选的,因为特定的集合可能不支持集合更改。
addall() 方法确保另一个集合中的所有元素都被添加到当前的集合中,通常称为并。 clear() 方法从当前集合中除去所有元素。 removeall() 方法类似于 clear() ,但只除去了元素的一个子集。
retainall() 方法类似于 removeall()
方法,不过可能感到它所做的与前面正好相反:它从当前集合中除去不属于另一个集合的元素,即交。
iterator
collection 接口的 iterator() 方法返回一个 iterator。
1) 使用方法 iterator() 要求容器返回一个iterator .第一次调用iterator 的next()
方法时,它返回集合序列的第一个元素。
2)使用next() 获得集合序列的中的下一个元素。
3)使用hasnext()检查序列中是否元素。
4) 使用remove()将迭代器新返回的元素删除
set
set最大的特性就是不允许在其中存放的元素是重复的。
public int size()
:返回set中元素的数目,如果set包含的元素数大于integer.max_value,返回integer.max_value
public boolean isempty() :如果set中不含元素,返回true
public boolean contains(object o) :如果set包含指定元素,返回true
public iterator iterator():返回set中元素的迭代器
public object[] toarray() :返回包含set中所有元素的数组
public object[] toarray(object[] a)
:返回包含set中所有元素的数组,返回数组的运行时类型是指定数组的运行时类型
public boolean add(object o) :如果set中不存在指定元素,则向set加入
public boolean remove(object o)
:如果set中存在指定元素,则从set中删除
public boolean removeall(collection c)
:如果set包含指定集合,则从set中删除指定集合的所有元素
public boolean containsall(collection c)
:如果set包含指定集合的所有元素,返回true。如果指定集合也是一个set,只有是当前set的子集时,方法返回true
public boolean addall(collection c)
:如果set中中不存在指定集合的元素,则向set中加入所有元素
public boolean retainall(collection c)
:只保留set中所含的指定集合的元素(可选操作)。换言之,从set中删除所有指定集合不包含的元素。
如果指定集合也是一个set,那么该操作修改set的效果是使它的值为两个set的交集
public void clear() :从set中删除所有元素
hashset、linkedhashset、treeset
list
当我们不知道存储的数据有多少的情况,我们就可以使用list
来完成存储数据的工作。例如前面提到的一种场景。我们想要在保存一个应用系统当前的在线用户的信息。我们就可以使用一个list来存储。因为list的最大的特点就是能够自动的根据插入的数据量来动态改变容器的大小。在 list
中搜索元素可以从列表的头部或尾部开始,如果找到元素,还将报告元素所在的位置。
void add(int index, object element)
:添加对象element到位置index上
boolean addall(int index, collection collection)
:在index位置后添加容器collection中所有的元素
object get(int index) :取出下标为index的位置的元素
int indexof(object element) :查找对象element
在list中第一次出现的位置
int lastindexof(object element) :查找对象element
在list中最后出现的位置
object remove(int index) :删除index位置上的元素
object set(int index, object element) :将index位置上的对象替换为element
并返回老的元素。
<code>listiterator</code> 接口继承 <code>iterator</code>
接口以支持添加或更改底层集合中的元素,还支持双向访问。
map
数学中的映射关系在java中就是通过map来实现的。它表示,里面存储的元素是一个对(pair),我们通过一个对象,可以在这个映射关系中找到另外一个和这个对象相关的东西。
<code>object put(object key,object value)</code><code>:用来存放一个键</code><code>-</code><code>值对</code><code>map</code><code>中</code>
<code>object remove(object key)</code><code>:根据</code><code>key(</code><code>键</code><code>)</code><code>,移除一个键</code><code>-</code><code>值对,并将值返回</code>
<code>void putall(map mapping)</code><code>:将另外一个</code><code>map</code><code>中的元素存入当前的</code><code>map</code><code>中</code>
<code>void clear()</code><code>:清空当前</code><code>map</code><code>中的元素</code>
<code>object get(object key)</code><code>:根据</code><code>key(</code><code>键</code><code>)</code><code>取得对应的值</code>
<code>boolean containskey(object key)</code><code>:判断</code><code>map</code><code>中是否存在某键(</code><code>key</code><code>)</code>
<code>boolean containsvalue(object value):</code><code>判断</code><code>map</code><code>中是否存在某值</code><code>(value)</code>
<code>int size():</code><code>返回</code><code>map</code><code>中</code><code></code>键-值对的个数
<code>boolean isempty()</code><code>:判断当前</code><code>map</code><code>是否为空</code>
<code>public set keyset()</code><code>:返回所有的键(</code><code>key</code><code>),并使用</code><code>set</code><code>容器存放</code>
<code>public collection values()</code><code>:返回所有的值(</code><code>value</code><code>),并使用</code><code>collection</code><code>存放</code>
<code>public set entryset()</code><code>:</code>返回一个实现 map.entry
接口的元素 set
hashmap若遇到重复的key,覆盖掉以前的
从运行结果,我们可以看出,hashmap的存入顺序和输出顺序无关。而linkedhashmap
则保留了键值对的存入顺序。treemap则是对map中的元素进行排序。在实际的使用中我们也经常这样做:使用hashmap或者linkedhashmap
来存放元素,当所有的元素都存放完成后,如果使用则是需要一个经过排序的map的话,我们再使用treemap来重构原来的map对象。这样做的好处是:因为hashmap和linkedhashmap
存储数据的速度比直接使用treemap
要快,存取效率要高。当完成了所有的元素的存放后,我们再对整个的map中的元素进行排序。这样可以提高整个程序的运行的效率,缩短执行时间。
转载请注明出处: