介绍
集合的基本框架组成中,首先是4个接口,分别是Collection、Set、List和Map接口,其中Set和List继承了Collection接口,而Map接口则是单独的,和其他三个没有任何关系。然后有一些具体的类分别实现这些接口,构成了整个集合的框架。
接口 | 类的实现 | |
---|---|---|
Set | HashSet | TreeSet |
List | ArrayList | Vector |
LinkedList | Stack | |
Map | HashMap | Hashtable |
TreeMap |
加上具体的实现类(转别人的图):
Set集合
Set集合继承Collection,最大的特点是Set中不允许有重复的元素,也就是说,当插入一个元素的时候,Set会判断元素是否已经存在,再确定是否执行添加操作。
HashSet
HashSet的存储流程分为这几步:1.通过add()方法向Set集合中添加元素 2.调用hashCode()方法获取对象的哈希值 3.根据哈希值计算对象的存储位置 4.判断该位置是否有对象 5.如果有,调用equals()方法比较对象是否相等。HashSet允许保存null,但是注意,此实现不同步,即如果多个线程并发访问哈希集,并且至少有一个线程修改该集合,那么它必须在外部进行同步。
[构造方法]
[其他方法]
TreeSet
TreeSet类实现了Set接口,还实现了java.util.sortedSet接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,或者可以自定义排序规则进行排序。此类同样,不同步,也不允许重复值,相比于HashSet,还不能保存null。
[构造方法]
-
-
TreeSet()
构造一个新的,空的树组,根据其元素的自然排序进行排序。
TreeSet(Collection<? extends E> c)
构造一个包含指定集合中的元素的新树集,根据其元素的 自然排序进行排序 。
TreeSet(Comparator<? super E> comparator)
构造一个新的,空的树集,根据指定的比较器进行排序。
TreeSet(SortedSet<E> s)
构造一个包含相同元素的新树,并使用与指定排序集相同的顺序。
-
[新增方法]
-
-
Comparator<? super E>
comparator()
返回用于对该集合中的元素进行排序的比较器,或null,如果此集合使用其元素的natural ordering 。
E
first()
返回此集合中当前的第一个(最低)元素。
SortedSet<E>
headSet(E toElement)
返回此集合的部分的视图,其元素严格小于 toElement 。
NavigableSet<E>
headSet(E toElement, boolean inclusive)
返回该集合的部分的视图,其元素小于(或等于,如果
inclusive
为真)toElement
。E
last()
返回此集合中当前的最后(最高)元素。
SortedSet<E>
subSet(E fromElement, E toElement)
返回此集合的部分的视图,其元素的范围从 fromElement (含)到 toElement ,排他。
SortedSet<E>
tailSet(E fromElement)
返回此组件的元素大于或等于 fromElement的部分的视图。
-
List列表
列表是指一个有序的对象集合,也称为一个对象序列。通过列表接口,可以利用整数索引对列表中的每个元素准确控制,与Set集合最大的不同是,列表中容许出现重复的元素。
ArrayList
ArrayList类是通过数组方实现,优点是实现了可变的数组,允许保存所有元素,包括null,并且可以根据索引位置对集合进行快速的随机访问;缺点是向制定的索引位置插入或删除对象的速度比较慢。
[构造方法]
-
-
ArrayList()
构造一个初始容量为十的空列表。
ArrayList(Collection<? extends E> c)
构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
ArrayList(int initialCapacity)
构造具有指定初始容量的空列表。
-
[其他方法]
-
-
boolean
add(E e)
将指定的元素追加到此列表的末尾。
void
add(int index, E element)
在此列表中的指定位置插入指定的元素。
boolean
addAll(Collection<? extends E> c)
按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。
boolean
addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入到此列表中,从指定的位置开始。
void
clear()
从列表中删除所有元素。
boolean
contains(Object o)
如果此列表包含指定的元素,则返回 true 。
void
ensureCapacity(int minCapacity)
如果需要,增加此 ArrayList实例的容量,以确保它可以至少保存最小容量参数指定的元素数。
E
get(int index)
返回此列表中指定位置的元素。
int
indexOf(Object o)
返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
boolean
isEmpty()
如果此列表不包含元素,则返回 true 。
Iterator<E>
iterator()
以正确的顺序返回该列表中的元素的迭代器。
int
lastIndexOf(Object o)
返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
E
remove(int index)
删除该列表中指定位置的元素。
boolean
remove(Object o)
从列表中删除指定元素的第一个出现(如果存在)。
boolean
removeAll(Collection<?> c)
从此列表中删除指定集合中包含的所有元素。
boolean
removeIf(Predicate<? super E> filter)
删除满足给定谓词的此集合的所有元素。
protected void
removeRange(int fromIndex, int toIndex)
从这个列表中删除所有索引在
fromIndex
(含)和toIndex
之间的元素。void
replaceAll(UnaryOperator<E> operator)
将该列表的每个元素替换为将该运算符应用于该元素的结果。
boolean
retainAll(Collection<?> c)
仅保留此列表中包含在指定集合中的元素。
E
set(int index, E element)
用指定的元素替换此列表中指定位置的元素。
int
size()
返回此列表中的元素数。
void
sort(Comparator<? super E> c)
使用提供的
Comparator
对此列表进行排序以比较元素。Object[]
toArray()
以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。
<T> T[]
toArray(T[] a)
以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。
void
trimToSize()
修改这个 ArrayList实例的容量是列表的当前大小。
-
LinkedList
LinkedList类采用链表结构实现,优点是便于像集合中插入和删除元素,但是对于随机访问集合中的对象,效率很低。通常,LinkedList用来实现堆栈(stack)、队列(queue)。
[构造方法]
-
-
LinkedList()
构造一个空列表。
LinkedList(Collection<? extends E> c)
构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
-
[新增方法]
Map映射
Map接口描述了不重复的键到值的映射 ,一个映射对象不能包含重复的键,并且每个键只能映射到一盒值,在映射中“键-值”对所表述的对象称为条目Entry。简单来说,映射存储的是一对对象,通过键来获取值。
HashMap+TreeMap
[构造方法]
[其他方法]
-
-
void
clear()
从这张地图中删除所有的映射。
Object
clone()
返回此 HashMap实例的浅拷贝:键和值本身不被克隆。
boolean
containsKey(Object key)
如果此映射包含指定键的映射,则返回 true 。
boolean
containsValue(Object value)
如果此地图将一个或多个键映射到指定值,则返回 true 。
Set<Map.Entry<K,V>>
entrySet()
返回此地图中包含的映射的
Set
视图。V
get(Object key)
返回到指定键所映射的值,或
null
如果此映射包含该键的映射。boolean
isEmpty()
如果此地图不包含键值映射,则返回 true 。
Set<K>
keySet()
返回此地图中包含的键的
Set
视图。V
put(K key, V value)
将指定的值与此映射中的指定键相关联。
void
putAll(Map<? extends K,? extends V> m)
将指定地图的所有映射复制到此地图。
V
remove(Object key)
从该地图中删除指定键的映射(如果存在)。
boolean
remove(Object key, Object value)
仅当指定的密钥当前映射到指定的值时删除该条目。
V
replace(K key, V value)
只有当目标映射到某个值时,才能替换指定键的条目。
boolean
replace(K key, V oldValue, V newValue)
仅当当前映射到指定的值时,才能替换指定键的条目。
void
replaceAll(BiFunction<? super K,? super V,? extends V> function)
将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都被处理或该函数抛出异常。
int
size()
返回此地图中键值映射的数量。
Collection<V>
values()
返回此地图中包含的值的
Collection
视图。
-
HashMap和TreeMap都是Map接口的实现类,如果要进行插入、删除和定位元素,用HashMap最合适;如果要按顺序遍历键,则选择TreeMap,TreeMap的对象的插入删除是通过红-黑树算法实现的,并将整个映射图维持为一个平衡树结构,并且TreeMap是有顺序的。
Arrays类和Collections类
这两个类里面都是静态方法,因为这两个类是对数组对象、集合对象的操作类,直接通过类名调用,然后对相应的数组对象、集合对象进行操作。其中主要的还是排序等操作,详情参考jdk,里面的方法太多了。