【浅谈Java中HashMap集合】

376 阅读3分钟

“这是我参与8月更文挑战的第3天,活动详情查看: 8月更文挑战

在学习一个类时,我们首先要了解这个类在哪个包下,在使用时导入该类所在包,其次就是该类的构造方法,最后就是该类的实例方法。我们就按照这个步骤来学习HashMap这个类。

HashMap所在包

HashMap这个类实在java.util包下。因此在使用HashMap时需要导入java.util.HashMap

import java.util.HashMap;

HashMap继承Map接口 HashMap<Key,Value>Key是键的类型,Value是映射的值的类型。

HashMap有下面几个特点:

  1. HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
  2. HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
  3. HashMap 是无序的,即不会记录插入的顺序。
  4. HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口

HashMap的构造方法

HashMap()        
构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。

HashMap(int initialCapacity)        
构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
  
HashMap(int initialCapacity,  float loadFactor)       
构造一个带指定初始容量和加载因子的空HashMap。
  
HashMap(Map<? extends K,? extends V> m)        
构造一个映射关系与指定 Map 相同的新 HashMap。

HashMap有两个参数影响其性能,一个是初始容量(initialCapacity),一个是加载因子(loadFactor)

容量 是 哈希表中桶的数量,初始容量只是哈希表在创建时的容量。 加载因子 是 哈希表在容量自动增加之前可以达到多满的一种衡量的尺度。 当哈希表中的key的个数超出了加载因子与当前容量的乘积时,哈希表会进行rehash操作,即重建内部数据结构,从而将哈希表扩大为当前的两倍的桶数。

HashMap的实例方法

  void               	clear()        从此映射中移除所有映射关系。           
 
 boolean            	containsKey(Object key)        如果此映射包含对于指定键的映射关系,则返回 true。
 
 boolean            	containsValue(Object value)        如果此映射将一个或多个键映射到指定值,则返回 true。
 
 Set<Map.Entry<K,V>>	entrySet()        返回此映射所包含的映射关系的 Set 视图。

 V                  	get(Object key)        返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。

 boolean            	isEmpty()        如果此映射不包含键-值映射关系,则返回 true。
 
 Set<K>             	keySet()        返回此映射中所包含的键的 Set 视图。    
 V                  	put(K key, V value)        在此映射中关联指定值与指定键。
 
 V                  	remove(Object key)        从此映射中移除指定键的映射关系(如果存在)。
 
 int                	size()        返回此映射中的键-值映射关系数。          
 
 Collection<V>      	values()        返回此映射所包含的值的 Collection 视图。

这里就只介绍一些比较不好理解的方法,增、删、包含等好理解的就不再过多的解释了。

上代码:

public static void main(String[] args) {
   HashMap<String,String> hashMap = new HashMap<>();
   hashMap.put("1","杨幂");
   hashMap.put("2","迪丽热巴");
   hashMap.put("3","赵丽颖");
   hashMap.put("4","高圆圆");
   //迭代HashMap
   //只访问key
   for (String s : hashMap.keySet()) {
      System.out.println(s);
   }
   //只访问value
   for (String value : hashMap.values()) {
      System.out.println(value);
   }
   //访问key和value
   for (Map.Entry<String, String> stringStringEntry : hashMap.entrySet()) {
      System.out.println(stringStringEntry.getKey()+stringStringEntry.getValue());
   }
}

希望以上内容对大家有所帮助,如有错误欢迎掘友们指正!