文章目录
1 Set
1.1 TreeSet
1.1.1概念
TreeSet:基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
- TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现。
- 实现为 containsKey、get、put 和 remove 操作提供受保证的 log(n) 时间开销。
- 不能存储null元素,除非Comparator中定义了null元素
- 如果创建对象时,没有传入 Comparator 对象,则根据自然顺序进行排序。要求存储对象必须实现Comparable接口,否则会抛出ClassCastException.
- 如果创建对象时,传入了 Comparator 对象,则根据 Comparator 进行排序。不要求元素必须实现Comparable接口
- 不能修改 TreeSet 元素的属性值,否则不保证元素有序
- 不同步
1.1.2 API
API
E ceiling(E e)
返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null
E floor(E e)
返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null。
Comparator<? super E> comparator()
返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回 null
Iterator<E> descendingIterator()
返回在此 set 元素上按降序进行迭代的迭代器
E last()
返回此 set 中当前最后一个(最高)元素
E first()
返回此 set 中当前第一个(最低)元素
E higher(E e)
返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null
E lower(E e)
返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null
E pollFirst()
获取并移除第一个(最低)元素;如果此 set 为空,则返回 null
E pollLast()
获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null
NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
返回此 set 的部分视图,其元素范围从 fromElement 到 toElement。
SortedSet<E> subSet(E fromElement, E toElement)
返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。
SortedSet<E> tailSet(E fromElement)
返回此 set 的部分视图,其元素大于等于 fromElement。
NavigableSet<E> tailSet(E fromElement, boolean inclusive)
返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true)fromElement。
2 Map(映射)
2.1 概述
- 将键映射到值的对象
- 一个映射不能包含重复的键
- 每个键最多只能映射到一个值。
2.2 API
接口 Map.Entry<K,V>
boolean equals(Object o)
比较指定对象与此项的相等性。
K getKey()
返回与此项对应的键。
V getValue()
返回与此项对应的值。
int hashCode()
返回此映射项的哈希码值。
V setValue(V value)
用指定的值替换与此项对应的值(可选操作)。
MAP API
增(改):
V put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)。
void putAll(Map<? extends K,? extends V> m)
从指定映射中将所有映射关系复制到此映射中(可选操作)
删:
void clear()
从此映射中移除所有映射关系(可选操作)
V remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)
查:
boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
V get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
获取集合属性:
int size()
返回此映射中的键-值映射关系数
boolean isEmpty()
如果此映射未包含键-值映射关系,则返回 true
遍历:
Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图(遍历键值对)
Set<K> keySet()
返回此映射中包含的键的 Set 视图(遍历键)
Collection<V> values()
返回此映射中包含的值的 Collection 视图(遍历值)
3 HashMap
3.1 概述
- 基于哈希表的 Map 接口的实现。
- 此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null之外,HashMap 类与 Hashtable 大致相同,底层都是哈希表)
- 此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
- 不同步
- HashMap存储自定义对象:
HashMap依赖Key对象的equals()和hashCode()
千万不要修改HashMap key的属性值
3.2 构造方法
HashMap()
构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap
HashMap(int initialCapacity)
构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap
HashMap(int initialCapacity, float loadFactor)
构造一个带指定初始容量和加载因子的空 HashMap
HashMap(Map<? extends K,? extends V> m)
构造一个映射关系与指定 Map 相同的新 HashMap
HashMap 与 Hashtable
- 继承的父类不同
HashMap继承自AbstractMap类。但二者都实现了Map接口。
Hashtable继承自Dictionary类,Dictionary类是一个已经被废弃的类(见其源码中的注释)。父类都被废弃,自然而然也没人用它的子类Hashtable了。 - HashMap线程不安全,HashTable线程安全
- 包含的contains方法不同
HashMap是没有contains方法的,而包括containsValue和containsKey方法;hashtable则保留了contains方法,效果同containsValue,还包括containsValue和containsKey方法。 - 是否允许null值
Hashmap是允许key和value为null值的,用containsValue和containsKey方法判断是否包含对应键值对;HashTable键值对都不能为空,否则报空指针异常。 - 计算hash值方式不同
- 扩容方式不同(容量不够)
HashMap 哈希扩容必须要求为原容量的2倍,而且一定是2的幂次倍扩容结果,而且每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入;
而Hashtable扩容为原容量2倍加1; - 解决hash冲突方式不同
4 LinkedHashMap
概述:
- HashMap的子类
- Map 接口的哈希表和链表实现,具有可预知的迭代顺序.
- 链表定义了迭代顺序,该迭代顺序就是键值对的插入顺序
- 不同步
- 注意事项:
HashMap依赖Key对象的equals()和hashCode()
千万不要修改HashMap key的属性值
5 TreeMap
5.1 概述
- 底层的数据结构是红黑树
- 如果创建对象时,没有传入 Comparator 对象,键将按自然顺序进行排序
- 如果创建对象时,传入了 Comparator 对象,键将按 Comparator 进行排序
- 不能存储null键, 除非Comparator对象对象对null对象能进行比较
- 不同步
- TreeMap依赖于Key的compareTo()方法,或者是传入Comparator对象的compare()
构造方法
TreeMap()
使用键的自然顺序构造一个新的、空的树映射
TreeMap(Comparator<? super K> comparator)
构造一个新的、空的树映射,该映射根据给定比较器进行排序
TreeMap(Map<? extends K,? extends V> m)
构造一个与给定映射具有相同映射关系的新的树映射,该映射根据其键的自然顺序 进行排序
TreeMap(SortedMap<K,? extends V> m)
构造一个与指定有序映射具有相同映射关系和相同排序顺序的新的树映射
5.2 TreeMap特有的API
K firstKey()
返回此映射中当前第一个(最低)键
K lastKey()
返回映射中当前最后一个(最高)键
Map.Entry<K,V> pollFirstEntry()
移除并返回与此映射中的最小键关联的键-值映射关系;如果映射为空,则返回 null
Map.Entry<K,V> pollLastEntry()
移除并返回与此映射中的最大键关联的键-值映射关系;如果映射为空,则返回 null
K floorKey(K key)
返回小于等于给定键的最大键;如果不存在这样的键,则返回 null
K ceilingKey(K key)
返回大于等于给定键的最小键;如果不存在这样的键,则返回 null
K lowerKey(K key)
返回严格小于给定键的最大键;如果不存在这样的键,则返回 null
K higherKey(K key)
返回严格大于给定键的最小键;如果不存在这样的键,则返回 null
NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
返回此映射的部分视图,其键的范围从 fromKey 到 toKey