HashMap
HashMap 底层是基于数组和链表实现的。其中有两个重要的参数:容量和负载因子
容量的默认大小是 16,负载因子是 0.75,当 HashMap 的 size > 16*0.75 时就会发生扩容(容量和负载因子都可以自由调整)。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
HashMap 是一个无序的
Map
,因为每次根据key
的hashcode
映射到Entry
数组上,所以遍历出来的顺序并不是写入的顺序。
JDK 推出一个基于HashMap
但具有顺序的LinkedHashMap
来解决有排序需求的场景,是通过使用双向链表来实现的
遍历方式
Iterator<Map.Entry<String, Integer>> entryIterator = map.entrySet().iterator();
while (entryIterator.hasNext()) {
Map.Entry<String, Integer> next = entryIterator.next();
System.out.println("key=" + next.getKey() + " value=" + next.getValue());
}
HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put("aa",1);
hashMap.put("bb",2);
hashMap.put("cc",3);
hashMap.putIfAbsent("aa",4);
hashMap.remove("bb");
hashMap.remove("aa",5)
hashMap.get("CC");
Iterator iterator = hashMap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry entry = (Map.Entry) iterator.next();
String key = (String) entry.getKey();
Integer value = (Integer) entry.hetValue();
}
Iterator iterator = hashMap.entrySet().iterator();
while(iterator.hasNext()){
Map
}
hashMap.containsKey("aa");
hashMap.contiansValue(1);
hashMap.replace("ff",5);
数组中的重复数字
HashSet
hashset.add()
hashset.clear():从此 set 中移除所有元素。
hashset.remove(Object o):如果指定元素存在于此 set 中,则将其移除。
hashset.isEmpty():如果此 set 不包含任何元素,则返回 true。
hashset.contains(Object o):如果此 set 包含指定元素,则返回 true。
hashset.size():返回此 set 中的元素的数量(set 的容量)。
判断数组是否有重复的数字
public boolean containsDuplicate(int[] nums) {
Set<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
return set.size() < nums.length;
}
网友评论