Java基础知识--HashMap的理解

Posted WK_BlogYard

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础知识--HashMap的理解相关的知识,希望对你有一定的参考价值。

java.util

Class HashMap<K,V>

  java.lang.Object

    java.util.AbstractMap<K,V>

      java.util.HashMap<K,V>

  参数类型

  K - 由该Map维护的键的类型

  V - 映射值的类型

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

面试题一:  

HashMap的key存对象时应该注意什么?

    答:如果自定义对象作为Map的键,那么必须重写hashCode和equals.

面试题二:  

HashMap中hashCode作用?
    答:1、返回对象的哈希吗值(散列嘛),用来支持哈希表,比如HashMap

      2、可以提高哈希表的性能

对HashMap的理解?  

HashMap是基于哈希表来实现的Map接口,此实现提供了所有可选的Map操作,并允许null的值和null的键(HashMap类大致相当于Hashtable,除了它是不同步的,并允许null值).HashMap不能保证map存入对象的顺序,并且它不能保证顺序在一段时间内不变.

  HashMap的一个实例有两个影响其性能的参数:初始容量和负载因子.初始容量是创建哈希表时的容量,负载因子是在容量自动增加之前允许哈希表得到满足的度量,当在散列表中的条目数超过了初始容量和负载因子的乘积,那么哈希表会被重新散列(即内部结构被重建),使哈希表扩大两倍.因此如果迭代性能很重要,不要将初始容量设置的太高(或负载因子太低),因为哈希表被重建很耗性能.

  默认的初始容量为16,默认的负载因子是0.75.

1 public class HashMapDemo {
2     public static void main(String[] args) {
3         //构造一个空的HashMap
4         Map map = new HashMap();
5         //默认的初始容量为16,默认的负载因子是0.75
6         Map map1 = new HashMap(16, (float) 0.75);
7     }
8 }

  map对应的详细方法:

 1 public class HashMapDemo {
 2     public static void main(String[] args) {
 3         //构造一个空的HashMap
 4         Map map = new HashMap();
 5         //默认的初始容量为16,默认的负载因子是0.75
 6         Map map1 = new HashMap(16, (float) 0.75);
 7         map.put("1","a");
 8         map.put("2","b");
 9         map.put("3","c");
10         map.put("4","d");
11         //方法详细信息
12         //1.public int size() 返回此地图中键值映射的数量
13         System.out.println("数量:"+map.size());
14         //2.public boolean isEmpty() 如果此map不包含键值映射,则返回 true 。
15         System.out.println("空?"+map.isEmpty());
16         //3.public V get(Object key) 返回到指定键所映射的值
17         System.out.println("映射值:"+map.get("1"));
18         //4.public boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回 true 。
19         System.out.println("是否包含key 1的映射:"+map.containsKey("1"));
20         //5.public V put(K key,V value) 新加映射关系。 如果地图先前包含了该键的映射,则替换旧值。
21         map.put("5","e");
22         //6.public void putAll(Map<? extends K,? extends V> m)
23         // 将指定地图的所有映射复制到此地图,这些映射将替换此映射对当前在指定映射中的任何键的任何映射。
24         map1.put("1","A");
25         map1.put("2","B");
26         map1.put("3","C");
27         map.putAll(map1);
28         System.out.println("新映射"+map.get("1"));//A
29         //7.public V remove(Object key) 从该map中删除指定键的映射(如果存在)。
30         map.remove("5");
31         System.out.println("删除5后:"+map.get("5"));
32         //8.public void clear() 从map中删除所有的映射。
33         //map.clear();
34         //9.public boolean containsValue(Object value)
35         System.out.println("是否有value对应的映射key"+map.containsValue("C"));
36         //10.public Set<K> keySet() 返回此map中包含的键的Set视图。
37         Set mapSet = map.keySet();
38         Iterator iterator = mapSet.iterator();
39         while (iterator.hasNext()){
40             System.out.println("key 的 set值"+iterator.next());
41         }
42         //11.public Collection<V> values() 返回此地图中包含的值的Collection视图。
43         Collection collection=map.values();
44         Iterator valuesIterator = collection.iterator();
45         while (valuesIterator.hasNext()){
46             System.out.println("values的值:"+valuesIterator.next());
47         }
48         //12.public V getOrDefault(Object key,V defaultValue) 返回到指定键所映射的值,如果没有显示默认值
49         System.out.println("如果没有key对应的value:"+map.getOrDefault("8","aa"));
50         //13.public boolean remove(Object key,Object value) 删除指定key和 value的对应关系,如果关系不对应,则不改变
51         System.out.println(map.remove("4","D"));
52         //14.public boolean replace(K key,V oldValue,V newValue) 替换指定key值对应的value值
53         map.replace("1","A","aaa");
54         //jdk8的forEach的用法
55         map.forEach((key,value)->{
56             System.out.println("key:"+key+" value:"+value);
57         });
58     }
59 }

 

以上是关于Java基础知识--HashMap的理解的主要内容,如果未能解决你的问题,请参考以下文章

JAVA零基础小白学习免费教程day14-Set&HashMap

JAVA零基础小白学习免费教程day14-Set&HashMap

java提高---HashMap解析

HashMap原理:哈希函数的设计

HashMap 知识整理

Java基础学习之--理解Object类