欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hash表

程序员文章站 2022-07-15 15:26:40
...

HashMap

HashMap 底层是基于数组和链表实现的。其中有两个重要的参数:容量和负载因子
容量的默认大小是 16,负载因子是 0.75,当 HashMap 的 size > 16*0.75 时就会发生扩容(容量和负载因子都可以*调整)。

Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。

HashMap 是一个无序的 Map,因为每次根据 keyhashcode 映射到 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;
}