zoukankan      html  css  js  c++  java
  • 关于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

    
    



  • 相关阅读:
    软件工程概论作业二 电梯调度思路 信1205班 刘权毅 董文轩
    软件工程概论作业一 信1205班 20122561 董文轩
    团队开发第三天(董文轩,苏康奖,常晓杨,刘权毅,刘梦辉,刘若凡)
    软件工程概论作业三 信1205班 董文轩 刘权毅
    IDEA 搭建spring+maven+mybatis+mysql+junit+log4j2
    什么时候需要实现序列化Serializable
    IDEA如何查看maven依赖冲突
    Docker for windows : 安装linux
    Mybatis 分页
    POI java操作OFFICE产品
  • 原文地址:https://www.cnblogs.com/jzmanu/p/10284795.html
Copyright © 2011-2022 走看看