hashMap的基本使用

本次主要说明hashMap的基本使用。虽然HashMap是线程不安全的,但是也有必要深入学习。map有键和值得概念,键和值是关联关系,map按照键存储和访问值,键不会重复,重复设置会覆盖前面的值

hashMap的创建

 HashMap<Object, Object> map = new HashMap<>();

hashMap的元素添加

//添加元素
map.put("aaa", "123");
map.put("bbb", "111");
map.put("ccc", "222");
map.put("ddd", "333");

hash的几种遍历方式

/**
 *  遍历map的方式有四种方式
 * 1 在for循环中使用entries实现Map的遍历
 * 2 在for循环中遍历key或者values
 * 3 通过Iterator遍历
 * 4 通过键找值遍历,这种方式的效率比较低,因为本身从键取值是耗时的操作
 */
// 第一种遍历
System.err.println("===========在for循环中使用entries实现Map的遍历===============");
for (Map.Entry<Object, Object> entries : map.entrySet()) {
    Object key = entries.getKey();
    Object value = entries.getValue();
    System.err.println(key.toString() + "\t\t" + value.toString());
}
//第二种遍历
System.err.println("==========在for循环中遍历key或者values============");
for (Object key : map.keySet()) {
    System.err.print("key\t" + key.toString() + "\t");
    System.err.print(map.get(key) + "\n");
}
System.err.println("=======通过map.values()遍历值集==========");
for (Object value : map.values()) {
    System.err.print(value.toString() + "\t");
}
//第三种遍历
System.err.println("\n===========通过Iterator遍历============");
Iterator<Map.Entry<Object, Object>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
    Map.Entry<Object, Object> entry = iterator.next();
    Object key = entry.getKey();
    Object value = entry.getValue();
    System.err.println(key.toString() + "\t\t" + value.toString());
}
//第四种遍历
System.err.println("=======通过键查找值遍历========");
for (Object key : map.keySet()) {
    Object o = map.get(key);
    System.err.println(key.toString() + "\t\t" + o.toString());
}
System.err.println("============lambda表达式===============");
map.forEach((k, v) -> {
    System.err.println(k.toString() + "\t" + v.toString());
});

遍历结果:

hashMap的删除:如果在遍历中删除map则会报java.util.ConcurrentModificationException异常,原因就是因为迭代器内部维护一些索引位置相关的数据,在迭代的过程中,不能添加、插入和删除元素,只是修改的话则不会引发这种异常

To delete key	aaa
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)
	at java.util.HashMap$KeyIterator.next(HashMap.java:1469)
	at com.jiang.demo.map.ch01.main(ch01.java:40)
//删除map里面的值
Set<Object> keySet = map.keySet();
for (Object key : keySet) {
    if (key.toString().equals("aaa")) {
        System.err.println("To delete key\t" + key);
        keySet.remove(key);
    }
}

如果需要在遍历过程中进行删除操作,需要通过keySet或者entrySet的iterator来实现。

Iterator<Map.Entry<Object, Object>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
    Map.Entry<Object, Object> next = iterator.next();
    Object key = next.getKey();
    if (StringUtils.equals(key.toString(), "aaa")) {
        iterator.remove();
        System.err.println("==============删除完成===============");
    }
}   

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值