“这是我参与8月更文挑战的第3天,活动详情查看: 8月更文挑战”
在学习一个类时,我们首先要了解这个类在哪个包下,在使用时导入该类所在包,其次就是该类的构造方法,最后就是该类的实例方法。我们就按照这个步骤来学习HashMap这个类。
HashMap所在包
HashMap这个类实在java.util包下。因此在使用HashMap时需要导入java.util.HashMap
import java.util.HashMap;
HashMap继承Map接口
HashMap<Key,Value>Key是键的类型,Value是映射的值的类型。
HashMap有下面几个特点:
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
- HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
- HashMap 是无序的,即不会记录插入的顺序。
- 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());
}
}
希望以上内容对大家有所帮助,如有错误欢迎掘友们指正!