Map集合的遍历方式
entrySet() 获取所有Entry对象的Set集合
Map<Key, Value> map = new HashMap<>();
Set<Map.Entry<Key, Value>> entries = map.entrySet();
// 增强for
for (Map.Entry<Key, Value> entry : map.entrySet()) {
System.out.println(entry);
}
// Iterator迭代器
// 1. 通过迭代器获取值,通过entrySet()获取所有键值对对象
Iterator<java.util.Map.Entry<Key, Value>> iterator = map.entrySet().iterator();
// 2. 迭代器遍历键值对集合,拿到每一个键值对对象
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
foreach()通过函数式接口获取Key和Value
Map<Key, Value> map = new HashMap<>();
map.forEach(new BiConsumer<Key, Value>() {
@Override
public void accept(Key k, Value v) {
System.out.println(k,v);
}
};
调用map集合的getValue()通过Set<Key>集合获取Value
Map<Key, Value> map = new HashMap<>();
// 1. 通过键获取值,通过KeySet()获取所有键
Set<Key> keys = map.keySet();
// 2. 通过所有键使用增强for遍历
for (Key key : keys) {
// 3. 遍历途中使用get()获取value值
Value value = map.get(key);
System.out.println(key+"="+value);
}
获取Key对象的Set集合和Value对象的Collection集合
Map<Key, Value> map = new HashMap<>();
Set<Key> keys = map.keySet();
// 增强for遍历所有Key
for (Key key : keys) {
System.out.println(key);
}
Collection<map> values = map.values();
// 增强for遍历所有Value
for (Value value : values) {
System.out.println(values);
}
Map的实现类有哪些
常见实现
- TreeMap
红黑树:
1.根结点、叶子结点Nil必须黑色
2.两个红色结点不能连续
3.左右子路径黑结点必须相等
- HashMap
哈希表Jdk1.7(哈希表:数组+链表)
1.增删改查通过hashCode确定桶位置,当桶中有多个元素需要equals比较直到相等做操作(哈希碰撞同理,进行equals比较)
2.建议添加自定义元素时重写Object的hashCod()和equals()方法
哈希表+红黑树Jdk1.8
1.当数组长度到达64后,链表长度大于8则会触发内部结构变化为红黑树,改善了Jdk1.7的链表缺陷
2.当红黑树小于6则内部结构变化为链表
- HashTable
- LinkedHashMap
- Properties 此对象可以将集合数据写入到文本文件
Map键为什么唯一?存入顺序为什么不一定?如何保证key的唯一
#HashMap和HashTable区别
HashMap允许null键null值,线程不同步的,效率高
HashTable不允许null键null值,线程是同步的,效率略低