【Java】Map集合之HashMap

  • Post author:
  • Post category:java




从 此 音 尘 各 悄 然 , 春 山 如 黛 草 如 烟


目录


一、简介


二、操作方法


1. 定义一个HashMap集合


2. 添加:put()


3. 移除:remove()


4. 取值:get()


5. 判空:isEmpty()


6. 判断某元素是否存在:containsKey()和containsValue()


7. 元素个数:size()


8. 复制:clone()


9. 遍历HashMap


9.1 利用Set和for-each遍历


9.2 Entry遍历


9.3  Iterator遍历


一、简介

Map用于保存具有映射关系的数据,以<Key,Value>形式存储数据,key和value可以是任何类型的数据,key不允许重复,key和value之间存在单向的一对一关系,即通过一个指定的key总可以找到唯一与之对应的确定的value。


HashMap由数组+链表组成的

,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,

其中:链表的节点存储的是一个 Entry 对象,每个Entry 对象存储四个属性(hash,key,value,next)


HashMap具有以下特点:

1.无法保证键值对的顺序;

2.key值不可重复,key 用 Set 存放,所以想做到 key 不允许重复,key 对应的类需要重写 hashCode 和 equals 方法;

3.每个 key 只能对应一个 value, 但一个 value可以对应多个 key;

4.允许空键和空值(但空键只有一个,且放在第一位)。

二、操作方法

1. 定义一个HashMap集合

//方法1
Map<Object,Object> map = new HashMap<Object,Object>();
//方法2
HashMap<Object,Object> map = new HashMap<Object,Object>();

与Set和List的定义方法一样,Map的定义方法也有这两种,其中尖括号内泛型对应的数据为:<key,value>。

2. 添加:put()

HashMap<Object,Object> map = new HashMap<Object,Object>();
	
map.put(1, "a");
map.put(2, "b");
map.put(3, "a");
map.put(3, "b");
System.out.println("map:"+map);

由输出结果可以看到,map集合中不允许由重复的元素,其通过key值判断元素是否重复,且key值相同的元素后者会覆盖前者,但是允许同一个value有多个key值对应。

3. 移除:remove()

//根据key值移除键值对
map.remove(1);
System.out.println(map);

4. 取值:get()

//根据key值取值
System.out.println(map.get(2));

map中get方法的关键字为key值,通过key找到与之对应的value

5. 判空:isEmpty()

//判断map是否为空
System.out.println(map.isEmpty());

6. 判断某元素是否存在:containsKey()和containsValue()

containsKey()用来判断当前集合是否包含指定的key;containsValue()用来判断当前集合是否包含自定的value。

//当前集合是否包含指定的key
System.out.println(map.containsKey(2));
	
//当前集合是否包含指定的value
System.out.println(map.containsValue("a"));

7. 元素个数:size()

//元素个数
System.out.println(map.size());

8. 复制:clone()

//复制当前map
Object mm = map.clone();
System.out.println(mm);

9. 遍历HashMap

9.1 利用Set和for-each遍历

此种遍历方法是先提取出所有的key值,在遍历key值时通过get方法获得key对应的value

//获取map的所有key集合
Set<Object> keys = map.keySet();
	
//遍历map集合
for(Object key : keys) {
System.out.println(key+" --> "+map.get(key));
}

9.2 Entry遍历

由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系。 所以Map中采用

Entry内部类

来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也就是一个Entry)。entrySet是 java中 键-值 对的集合,Set里面的类型是Map.Entry。

Set<Entry<Object,Object>> entry = map.entrySet();
for(Entry<Object,Object> en : entry) {
    System.out.println(en.getKey()+" --> "+en.getValue());
}

9.3  Iterator遍历

Iterator<Entry<Object, Object>> it = map.entrySet().iterator();
while (it.hasNext()) {
    Entry<Object, Object> entry = it.next();
    System.out.println("key= " + entry.getKey() + " ,value= " + entry.getValue());
}



版权声明:本文为weixin_53972936原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。