HashMap,LinkedHashMap,IdentityHashMap,HashSet之间的异同
1.HashMap键值不允许重复,重复会覆盖之前的键值对,显示的是最后的键值对。
2.HashSet存放的是某种类型的数据,如果数据重复,就不会往集合里添加数据,显示的是之前的数据。
3.map,set都是无序的,LinkedHashMap跟LinkedHashSet是有序的4.HashMap操作时key是不能重复的,如果重复则肯定会覆盖之前的内容。
public class ExampleUnitTest {private boolean playflag=false;String key="status";private Set<string> hashset=new HashSet();private LinkedHashMap<string, integer=""> map = new LinkedHashMap<>();private String letters[] = { "a", "b", "c", "d", "e","b" };@Beforepublic void init() {System.out.println(letters.length);for (int i = 0; i < letters.length; i++) {
map.put(letters[i], i + 1);
if(!hashset.add(letters[i]))System.out.println("repeat"+i);}for (String s : map.keySet()) {
System.out.println("key= " + s + " and value= " + map.get(s));}for(Integer string :map.values()){
System.out.println("value is "+string);}System.out.println("---unsortmap-----");Map<string, integer=""> m = new HashMap<>();for (int i = 0; i < 10; i++) {
m.put("key" + i, i);}System.out.println(m);//{key=value}的形式 map是无序!}@Testpublic void testGetHead() {assertEquals(getHead(map).getKey(), "a");assertEquals(getHead(map).getValue(), Integer.valueOf(1));}@Testpublic void testGetTail() {System.out.println(map.size());System.out.println(hashset.size());assertEquals(getTail(map).getKey(), "e");assertEquals(getTail(map).getValue(), Integer.valueOf(5));}@Testpublic void testGetTailByReflection() throws NoSuchFieldException, IllegalAccessException {assertEquals(getTailByReflection(map).getKey(), "e");assertEquals(getTailByReflection(map).getValue(), Integer.valueOf(5));}public <k, v=""> Map.Entry<k, v=""> getHead(LinkedHashMap<k, v=""> map) {return map.entrySet().iterator().next();}public <k, v=""> Map.Entry<k, v=""> getTail(LinkedHashMap<k, v=""> map) {Iterator<map.entry<k, v="">> iterator = map.entrySet().iterator();Map.Entry<k, v=""> tail = null;while (iterator.hasNext()) {
tail = iterator.next();}return tail;}@SuppressWarnings("unchecked")public <k, v=""> Map.Entry<k, v=""> getTailByReflection(LinkedHashMap<k, v=""> map)
throws NoSuchFieldException, IllegalAccessException {Field tail = map.getClass().getDeclaredField("tail");tail.setAccessible(true);return (Map.Entry<k, v="">) tail.get(map);}}
使用IdentityHashMap,key允许重复,只要两个对象的地址不相等即可
HashMap比较的是equals,IdentitiHashMap比较的是对象地址(是引用而不是值)
map = new HashMap(); // 实例化Map对象
map.put(new Person(“张三”, 30), “zhangsan_1”); // 增加内容
map.put(new Person(“张三”, 30), “zhangsan_2”); // 增加内容,key重复
map.put(new Person(“李四”, 31), “lisi”);
Output:
姓名:李四;年龄:31 –> lisi
姓名:张三;年龄:30 –> zhangsan_2
map = new IdentityHashMap(); // 实例化Map对象
map.put(new Person(“张三”, 30), “zhangsan_1”); // 增加内容
map.put(new Person(“张三”, 30), “zhangsan_2”); // 增加内容,key重复
map.put(new Person(“李四”, 31), “lisi”); // 增加内容
Output:
姓名:张三;年龄:30 –> zhangsan_2
姓名:张三;年龄:30 –> zhangsan_1
姓名:李四;年龄:31 –> lisi
HashMap,LinkedHashMap,IdentityHashMap,HashSet之间的异同相关推荐
- HashMap,HashTable,TreeMap,HashSet,TreeSet
注意:最好先看一下(三)中 树红黑树的数据结构分析,可以的话数组,链表的数据结构也先复习一下,这里默认你懂数组,链表 2.2 map Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对 ...
- Java中的Map集合及其子类HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap
一 .Map public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口哦取代了Dictionary类,后者完全是 ...
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...
- Hashtable TreeMap HashMap LinkedHashMap的区别
Hashtable TreeMap HashMap LinkedHashMap的区别 Hashtable TreeMap HashMap LinkedHashMap详解 Hashtable 1.内部存 ...
- HashMap, LinkedHashMap 和 TreeMap的区别
HashMap, LinkedHashMap 和 TreeMap的区别 Java里面的HashMap, LinkedHashMap 和 TreeMap 有什么区别?我看不出以下3个key和value有 ...
- 集合之比较接口器+Map家族的HashMap+LinkedHashMap+Hashtable+ConcurrentHashMap
集合之比较接口器+Map家族的HashMap+LinkedHashMap+Hashtable+ConcurrentHashMap 一.比较器接口 1.内置比较器 – Comparable import ...
- Windows 2003和XP之间的异同
Windows 2003和XP之间的异同 收集整理了一下,给一些朋友解说server2003系统的设置.关于用server操作系统,由于不了解,对稳定性,兼容性,驱动或多或少有些疑虑,Win2003是 ...
- 如何区别API、REST API、RESTful API和Web Service之间的异同
当你看到API接口你会想起什么?是接口.第三方调用.还是API文档?初看你可能会觉得这太熟悉了,这不是系统开发日常系列吗?但你仔细想一想,你会发现API的概念在你脑海里是如此的模糊.如何你通过搜索引擎 ...
- 绿米开关如何重置_三种墙壁开关:绿米、调光、凌动/米家之间的异同
三种墙壁开关:绿米.调光.凌动/米家之间的异同 2020-06-18 18:17:17 9点赞 28收藏 6评论 三种墙壁开关:绿米.调光.凌动/米家之间的异同 详细讲解绿米Aqara智能墙壁开关.Y ...
- 集合{LinkedHashMap TreeMap HashSet LinkedHashSet TreeSet 快速失败机制 ConcurrentHashMap CAS 多线程协同扩容}(二)
目录标题 LinkedHashMap Map集合框架结构体系图 什么是LinkedHashMap Linked 链式 的意思 HashMap "哈希映射"的意思 LinkedHas ...
最新文章
- android enum 内存,Android 中的 Enum 到底占多少内存?该如何用?
- [Noi2014]随机数生成器
- oracle表是动态表怎么算排名,Oracle学习动态性能表
- 7张图讲透Java垃圾回收算法!学妹直呼666!!!
- Bootstrap 图片的形状
- 【Scala】Scala Java Error: value filter is not a member of *
- model.train()和model.eval()
- 《流畅的Python》读书笔记——Python文本和字节序列
- linux hal 结构图
- dockerfile入门
- .Net程序逆向入门教程
- 2021年美赛资料准备
- 为知笔记 | 3 分钟创建格式美美的笔记
- 您似乎与家庭管理员不在同一个国家/地区,油管换区过程记录
- 就是美女,怎么了!!!
- 请问哪些好用文字转语音软件?
- 华硕笔记本开机自动进入bios,进不了windows系统的解决方法
- webRTC(十二):webrtc 传输速率控制
- NIC(Network Interface Controller,网络接口控制器)
- 没信号是不是就无服务器,不要没网就说wifi断流,你知道什么是断流吗?
热门文章
- Java中数据输入输出流——DataInputStream和DataOutputStream
- VBS脚本运行库 ——文本文件的建立、追加、删除等
- 领扣(LeetCode)七进制数 个人题解
- verilog求倒数-ROM实现方法
- ASP.NET WebApi 图片上传
- [.Net] 一句话Linq(递归查询)
- JAVA 最新 环境搭建(JDK 1.8 + Tomcat 9 + eclipse oxygen + mysql 5.7)
- Linux 进程管理 (ZZ)
- FFT海水模拟(又来了-_-b)
- 让手机重现“一律允许使用这台计算机进行调试”确认窗口