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