设为首页 加入收藏

TOP

java基础之集合Set
2014-11-23 19:04:13 】 浏览:9186
Tags: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
  
    s1 = new HashSet
   
    (); s1.add("abc"); s1.add("xyz"); s1.add("abc"); for (Iterator
    
      iter = s1.iterator(); iter.hasNext();) { System.out.println(iter.next()); } // 输出: // abc // xyz } public static void test2() { Set
     
       s1 = new HashSet
      
       (); s1.add(new String("abc")); s1.add(new String("xyz")); s1.add(new String("abc")); for (Iterator
       
         iter = s1.iterator(); iter.hasNext();) { System.out.println(iter.next()); } // 输出: // abc // xyz } public static void test3() { Set
        
          s = new HashSet
         
          (); s.add(new Person("zhangsan")); s.add(new Person("lisi")); s.add(new Person("zhangsan")); for (Iterator
          
            iter = s.iterator(); iter.hasNext();) { System.out.println(iter.next().getName()); } // 输出: // zhangsan // zhangsan // lisi } public static void test4() { Set
           
             s = new HashSet
            
             (); s.add(new Person1("zhangsan")); s.add(new Person1("lisi")); s.add(new Person1("zhangsan")); for (Iterator
             
               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(); } }
             
            
           
          
         
        
       
      
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring @Configuration 使用 下一篇字符串匹配KMP学习

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目