package com.test;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; public class MapIteratorDemo {
/*
* HashMap实现Map接口
* HashMap基于哈希表(数组+链表)实现
* 键和值可以使用null
* 非同步,线程不安全,无序
*/
public static void hashMapIterator(){
HashMap<String,Test> h = new HashMap<>();
Test t1 = new Test(1,"manu1",10);
Test t2 = new Test(2,"manu2",20);
Test t3 = new Test(3,"manu3",30);
h.put("test1",t1);
h.put("test2",t2);
h.put("test3",t3);
h.put("test4",t1);
System.out.println("删除前的k-v数:"+h.size());
h.remove("test1");//根据键移除指定的映射关系
System.out.println("删除后的k-v数:"+h.size());
t1.setId(5);
// h.remove("test4"); System.out.println("*********KeySet()*********");
Set<String> sets = h.keySet();//获取映射中所有键的集合
Iterator<String> i = sets.iterator();
while(i.hasNext()){
String keys = i.next();
Test tests = h.get(keys);
System.out.println(keys+"-->"+tests);//无序
}
System.out.println("*********entrySet()*********");
Set<Map.Entry<String, Test>> kv = h.entrySet();//获取键值对
Iterator<Entry<String, Test>> iter = kv.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
System.out.println("*********values()*********");
Collection<Test> co = h.values();//获取所有的值得集合
Iterator<Test> ic = co.iterator();
while(ic.hasNext()){
Test t = ic.next();
System.out.println(t);
}
}
/*
* HashSet实现Set接口
* HashSet也是基于哈希表实现
* 允许使用null元素
* 非同步,线程不安全,无序
*/
public static void hashSetIterator(){
HashSet<Test> h = new HashSet<>();
Test t1 = new Test(1,"manu1",10);
Test t2 = new Test(2,"manu2",20);
h.add(t1);
h.add(t2);
System.out.println("*********Iterator*********");
Iterator<Test> iter = h.iterator();
while(iter.hasNext()){
Test t = iter.next();
System.out.println(t);
}
System.out.println("*********foreach*********");
for (Test test : h) {
System.out.println(test);
}
System.out.println("删除前:"+h.size());
System.out.println("删除t1结果:"+h.remove(t1));
System.out.println("删除后:"+h.size());
/*
* 改变实例的属性后,
* 若在实例类中没有重写hashCode()方法,即使改变实例的属性值,其hash值也相同
* 因为Object中的hashCode()是native的,只与本地机器有关,所以,可以执行删除操作
* 若实例中重写hashCode()方法,由于改变了实例属性值,重写的hashCode()方法里,某些属性值
* 参与了hash值的计算,所以,改变属性值前后hash值也变化了,相当于在原来添加对象的位置找不到了,
* 故不能删除成功
*/
t2.setId(10);
System.out.println("删除t2结果:"+h.remove(t2));
System.out.println("删除后:"+h.size()); }
public static void main(String[] args) {
hashMapIterator();
System.out.println(">>>>>>>>>>test>>>>>>>>>>");
hashSetIterator();
}
}

运行结果:

删除前的k-v数:4
删除后的k-v数:3
*********KeySet()*********
test4-->id=5, name=manu1, age=10
test2-->id=2, name=manu2, age=20
test3-->id=3, name=manu3, age=30
*********entrySet()*********
test4=id=5, name=manu1, age=10
test2=id=2, name=manu2, age=20
test3=id=3, name=manu3, age=30
*********values()*********
id=5, name=manu1, age=10
id=2, name=manu2, age=20
id=3, name=manu3, age=30
>>>>>>>>>>test>>>>>>>>>>
*********Iterator*********
id=2, name=manu2, age=20
id=1, name=manu1, age=10
*********foreach*********
id=2, name=manu2, age=20
id=1, name=manu1, age=10
删除前:2
删除t1结果:true
删除后:1
删除t2结果:false
删除后:1

关于HashSet与HashMap的更多相关文章

  1. HashSet和HashMap的区别

    HashSet和HashMap的区别.Java的HashSet类是由哈希表支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用 null 元素.HashSet类为基本操作提供 ...

  2. HashSet与HashMap的区别

    本文由 ImportNew - 唐小娟 翻译自 Javarevisited.欢迎加入翻译小组.转载请见文末要求. HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到C ...

  3. java数据结构之HashSet和HashMap(java核心卷Ⅰ读书笔记)

    增加 删除 remove方法,可以删除指定的一个元素. 查找 ********************* **************************** HashSet既不可以用 0 1 2 ...

  4. Java HashSet和HashMap源码剖析

    转自: Java HashSet和HashMap源码剖析 总体介绍 之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说Ha ...

  5. Java集合 -- HashSet 和 HashMap

    HashSet 集合 HashMap 集合 HashSet集合 1.1 Set 接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一致 B:没有索引 C:存入集合的元素没有重复 1. ...

  6. HashSet、HashMap、Hashtable、TreeMap循环、区别

    HashSet 循环 //可以为null HashSet<Object> hashSet =new HashSet<Object>(); hashSet.add(1); has ...

  7. == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable

    一:== 和 equals == 比较引用的地址equals 比较引用的内容 (Object 类本身除外) String obj1 = new String("xyz"); Str ...

  8. Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等

    1.Set和Map的关系: Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个key-value对组成的集合. Set的集合继承体系: Map关系集合 Map集合的key特征:所有key ...

  9. JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)14

    一.集合Collection 1. 集合介绍 变量:表示的内存中的一个空间,只能保存确定类型的单个数据 数组:表示的是内存中的多个连续的空间,这些空间中可以存储多个同类型的数据. 后期继续学习面向对象 ...

  10. 验证HashSet和HashMap不是线程安全

    JAVA集合类: java.util包下的HashSet和HashMap类不是线程安全的, java.util.concurrent包下的ConcurrentHashMap类是线程安全的. 写2个测试 ...

随机推荐

  1. handlebar.js模板引擎(轻页面小工程可用)

    介绍 Handlebars 让你能够有能力高效地容易地创立语义化的模版.Handlebars兼容Mustache语法,在大多数情况下它可以读取Mustache的语法并在你当前模板中使用.具体点击这里 ...

  2. idea创建简单web项目分析Servlet的请求转发与重定向的区别

     注:如需转载,请附上原文链接,如有建议或意见,欢迎批评指正! 需求说明: // index.jsp页面 1 <% 2 String basePath = request.getScheme() ...

  3. 无刷新上传图片,ajax 和 iframe

    iframe 上传 upload.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

  4. PHP的json_encode和json_decode的区别

    经常搞混的两个PHP函数: json_encode()是对变量进行json编码 json_encode()为要编码的值,且该函数只对utf8编码的数据有效 json_decode($json)对jso ...

  5. AX2012/D365 SSRS报表开发

    大家好,好久没有做SSRS报表了,近期刚好有做2张,就整理起来供初学者参考. AX中SSRS报表开发的框架,父类非常多,这里跟大家简单分享2种比较常用的场景供大家使用. 1.简单的过滤字段,无特殊过滤 ...

  6. OpenCV3入门(十四)图像特效—挤压、哈哈镜、扭曲

    一.图像挤压特效 1.原理 图像压效果本质的图像坐标的非线性变换,将图像向内挤压,挤压的过程产生压缩变形,从而形成的效果. 挤压效果的实现是通过极坐标的形式,设图像中心为O(x,y),某点距离中心O的 ...

  7. 吃透这份pdf,面试阿里、腾讯、百度等一线大厂,顺利拿下心仪offer!

    前言 最近一位年前裸辞的朋友来找我诉苦,说因为疫情原因现在都在家吃老本.本想着年后就来找工作的,但是现在这个情况也不好找,而且很多公司也随着这次疫情面临着资金紧缺导致裁员严重的甚至倒闭,导致很多人失业 ...

  8. layui的弹出层的title的自定义html

       layui的弹出层的title的自定义html //在这里面输入任何合法的js语句 layer.open({ type: 1 //Page层类型 ,area: ['500px', '300px' ...

  9. ASP.NET MVC5实现芒果分销后台管理系统(一):系统结构设计,集成AutoMapper,Log4net

    在构思完系统思维脑图后,小墨回到家中,便摩拳擦掌开始了开发工作.要想迅速完成系统开发,前期系统设计和准备尤其重要,因为小墨做过太多大大小小的业务系统,准备工作也是十分顺利. 系统结构 整个系统工程结构 ...

  10. STM32 初学不知道外设对应的APB1还是APB2

    STM32参考手册搜索“系统架构”或者“系统结构”,即可查看外设挂在哪个时钟下,也就知道开启哪个时钟了.