关于HashSet与HashMap
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的更多相关文章
- HashSet和HashMap的区别
HashSet和HashMap的区别.Java的HashSet类是由哈希表支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用 null 元素.HashSet类为基本操作提供 ...
- HashSet与HashMap的区别
本文由 ImportNew - 唐小娟 翻译自 Javarevisited.欢迎加入翻译小组.转载请见文末要求. HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到C ...
- java数据结构之HashSet和HashMap(java核心卷Ⅰ读书笔记)
增加 删除 remove方法,可以删除指定的一个元素. 查找 ********************* **************************** HashSet既不可以用 0 1 2 ...
- Java HashSet和HashMap源码剖析
转自: Java HashSet和HashMap源码剖析 总体介绍 之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说Ha ...
- Java集合 -- HashSet 和 HashMap
HashSet 集合 HashMap 集合 HashSet集合 1.1 Set 接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一致 B:没有索引 C:存入集合的元素没有重复 1. ...
- HashSet、HashMap、Hashtable、TreeMap循环、区别
HashSet 循环 //可以为null HashSet<Object> hashSet =new HashSet<Object>(); hashSet.add(1); has ...
- == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable
一:== 和 equals == 比较引用的地址equals 比较引用的内容 (Object 类本身除外) String obj1 = new String("xyz"); Str ...
- Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等
1.Set和Map的关系: Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个key-value对组成的集合. Set的集合继承体系: Map关系集合 Map集合的key特征:所有key ...
- JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)14
一.集合Collection 1. 集合介绍 变量:表示的内存中的一个空间,只能保存确定类型的单个数据 数组:表示的是内存中的多个连续的空间,这些空间中可以存储多个同类型的数据. 后期继续学习面向对象 ...
- 验证HashSet和HashMap不是线程安全
JAVA集合类: java.util包下的HashSet和HashMap类不是线程安全的, java.util.concurrent包下的ConcurrentHashMap类是线程安全的. 写2个测试 ...
随机推荐
- 编写简单i18n库
i18n是什么?i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是"国际化"的简称. 前言 第一次接触多语言是用野生java ...
- 在Shadow DOM使用原生模板
原生模板的优势 延迟了资源加载 延迟了加载和处理模板所引用的资源的时机,这样,用户就能够在模板中使用任意多的资源,却不阻碍页面的渲染. 延迟了渲染内容 无论模板在什么位置,浏览器不会把模板中的内容直接 ...
- 大型Java进阶专题(一) 前言
前言 各位读者好,本系列为Java进阶专题,为那些有一定工作经验,做了多年业务的码农,希望突破技术瓶颈,但没有形成系统的Java只是体系,缺乏清晰的提升方法和学习路径的人,比如作者本人.该课题的是 ...
- golang 学习之路 string转换为其他类型 其他类型转换为string
将其他值转换为string 一般常用fmt.Sprintf(格式,转换的值) // 使用fmt.Sprintf 转换所有的类型为string 使用 这是第一种 // 注意在sprintf使用中需要注意 ...
- Python 【绘制图及turtle库的使用】
前言 最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,整理了一下,挑了一些觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~赶快去试一下吧) one ...
- git重新学习
一个学习网址:https://learngitbranching.js.org/ 一.对于一个新的远程空仓库 本地新建文件后推送 #初始化 git init #添加文件 git add README. ...
- Python深度学习 deep learning with Python
内容简介 本书由Keras之父.现任Google人工智能研究员的弗朗索瓦•肖莱(François Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,涉及计算机视觉.自然 ...
- 阿里云加Picgo或MPic搭建最豪横的图床
阿里云加Picgo或MPic搭建最豪横的图床 首先解释一下什么是图床,图床其实就是提供图片存储的服务器. 对于自建博客来说,由于各种原因的限制(比如穷...)可能无法购买存储空间比较大的VPS. 而对 ...
- PDF顯示插件
1. ie瀏覽器適用<object id="pdf_panel" class="pdf-panel" classid="clsid:CA8A97 ...
- JDBC链接数据库。
第一步,创建一个空包: 给包起个名字: 新建Modules: 给Modules起名: 创建libs文件: 点击file---->new---->project---->Directo ...