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

最新文章

  1. ADO.NET 核心对象简介
  2. phpcms学习的一点心得
  3. 关键字static/const的作用
  4. 淘宝druid数据库连接池
  5. JS数组随机排序
  6. 数据结构(11) -- 邻接表存储图的DFS和BFS
  7. 【MyBatis】 通过包含的jdbcType类型
  8. C++引用(Reference)
  9. Dalvik虚拟机的启动过程分析
  10. 持续集成Jenkins + robot framework + git
  11. MVC项目中使用百度地图
  12. 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
  13. TCP/IP、UDP、HTTP、SOCKET详解
  14. Eclipse导入已有的项目后项目报错的解决办法
  15. socket,tcp,http三者之间的区别和原理
  16. H+ 编辑tab页 保存后 刷新列表tab页 并关闭自已。tabA页调用tabB页的方法
  17. 分库分表、读写分离——用Sql和ORM(EF)来实现
  18. ie浏览器的版本
  19. [Java][读书笔记]多线程编程
  20. Python开发基础-Day31 Event对象、队列和多进程基础

热门文章

  1. 东南大学RM装甲板识别算法详解
  2. GPS授时器简介
  3. Python学习之布尔和数字
  4. 【07】openlayers 矢量图层
  5. frida的简单实用
  6. 组件/ 外层数据初始化时候,不应该触发 on-change 事件
  7. Java多线程并发04——合理使用线程池
  8. 爬虫 | Python下载m3u8视频
  9. VMware 虚拟机正在使用中
  10. tarjan算法强连通分量的正确性解释+错误更新方法的解释!!!+hdu1269