zoukankan      html  css  js  c++  java
  • java基金会成立Set

    1、设置

    当向集合Set中添加对象时。首先集合计算要添加对象的hashcode,依据该值得到一个位置用来存放当前的对象,当在该位置没有一个对象存在的时候,集合set觉得该对象在集合中不存在,直接添加进去。假设在该位置有一个对象存在。接着将准备添加到集合中的的对象与该位置上的对象进行equals比較。若返回false,在进行一次散列。将该对象放到散列后计算出的新地址。若返回true,不会再将该对象添加到集合中

     

    2、当重写equals方法时,必需要重写hashcode方法

    假设一个类的两个对象。使用equals方法比較时。结果为true,那么这两个对象必须具有同样的hashcode


    3、请參考下面代码执行。查看输出结果来理解以上说法

    test1和test2比較的是String,因为String重写了equals方法和hashcode方法。所以,String = “abc"。和 string = new String("abc")比較equals方法时候是返回true,因此test1和test2输出结果一致。Person类没有重写equals方法。而Person1重写了,所以test3和test4输出结果不一致。

    /**
     * author Ding Chengyun
     * 2014-2-23
     */
    package test;
    
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;
    
    /**
     * @author Ding Chengyun
     * 2014-2-23
     */
    public class SetTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		test4();
    	}
    	
    	public static void test1() {
    		Set<String> s1 = new HashSet<String>();
    		s1.add("abc");
    		s1.add("xyz");
    		s1.add("abc");
    		for (Iterator<String> iter = s1.iterator(); iter.hasNext();) {
    			System.out.println(iter.next());
    		}
    //		输出:
    //		abc
    //		xyz
    	}
    	
    	public static void test2() {
    		Set<String> s1 = new HashSet<String>();
    		s1.add(new String("abc"));
    		s1.add(new String("xyz"));
    		s1.add(new String("abc"));
    		for (Iterator<String> iter = s1.iterator(); iter.hasNext();) {
    			System.out.println(iter.next());
    		}
    		
    //		输出:
    //		abc
    //		xyz
    
    	}
    	
    	public static void test3() {
    		Set<Person> s = new HashSet<Person>();
    		s.add(new Person("zhangsan"));
    		s.add(new Person("lisi"));
    		s.add(new Person("zhangsan"));
    		for (Iterator<Person> iter = s.iterator(); iter.hasNext();) {
    			System.out.println(iter.next().getName());
    		}
    		
    //		输出:
    //		zhangsan
    //		zhangsan
    //		lisi
    
    	}
    
    	public static void test4() {
    		Set<Person1> s = new HashSet<Person1>();
    		s.add(new Person1("zhangsan"));
    		s.add(new Person1("lisi"));
    		s.add(new Person1("zhangsan"));
    		for (Iterator<Person1> iter = s.iterator(); iter.hasNext();) {
    			System.out.println(iter.next().getName());
    		}
    //		输出:
    //		lisi
    //		zhangsan
    	}
    }
    
    class Person {
    	String name;
    	public Person(String name) {
    		this.name = name;
    	}
    	public String getName() {
    		return name;
    	}
    }
    
    class Person1 {
    	String name;
    	public Person1(String name) {
    		this.name = name;
    	}
    	public String getName() {
    		return name;
    	}
    	
    	public boolean equals(Object obj) {
    		if (this == obj) {
    			return true;
    		}
    		if (obj instanceof Person1) {
    			Person1 p = (Person1)obj;
    			if (this.name.equals(p.getName())) {
    				return true;
    			}
    		}
    		return false;
    	}
    	
    	public int hashCode() {
    		return name.hashCode();
    	}
    }


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    MSchart设置网格线
    搭建ELDK交叉编译环境
    Virtualbox设置共享文件夹的方法
    VS2010自动关闭问题的解决方法
    如何让PHPCms内容页支持JavaScript
    Phpcms V9 调用全站最新文章的代码
    Phpcms V9 调用随机文章的方法
    VMware下Ubuntu不能和主机共享文件夹的解决方法
    Xshell无法连接Ubuntu的解决办法
    Phpcms V9 调用全站文章排行的解决方案
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4653475.html
Copyright © 2011-2022 走看看