A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dana-乌拉拉 中级黑马   /  2014-11-24 18:04  /  733 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第四讲     Set
一、概述
        Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。     
           |--HashSet:底层数据结构是哈希表。线程不同步。 保证元素唯一性的原理:判断元素的hashCode值是否相同。如果相同,还会继续判断元素的equals方法,是否为true。
           |--TreeSet:可以对Set集合中的元素进行排序。默认按照字母的自然排序。底层数据结构是二叉树。保证元素唯一性的依据:compareTo方法return 0。
        Set集合的功能和Collection是一致的。

二、HasSet
        HashSet:线程不安全,存取速度快。
       可以通过元素的两个方法,hashCode和equals来完成保证元素唯一性。如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashCode值不同,不会调用equals。
注意:HashSet对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法。
示例:
[java] view plaincopy
/*
往hashSet集合中存入自定对象
姓名和年龄相同为同一个人,重复元素。去除重复元素
思路:1、对人描述,将人的一些属性等封装进对象
      2、定义一个HashSet容器,存储人对象
      3、取出

*/  
import java.util.*;  
  
//人描述  
class Person  
{  
    private String name;  
    private int age;  
  
    Person(String name,int age)  
    {  
        this.name=name;  
        this.age=age;  
    }  
  
    public String getName()  
    {  
        return name;  
    }  
  
    public int getAge()  
    {  
        return age;  
    }  
  
    public boolean equals(Object obj)  
    {  
        if(!(obj instanceof Person))  
            return false;  
        Person p=(Person)obj;  
        return this.name.equals(p.name)&&this.age==p.age;  
    }  
  
    public int hashCode()  
    {  
        return this.name.hashCode()+this.age;  
    }  
}  
class  HashSetTest  
{  
    public static void main(String[] args)   
    {  
        HashSet h=new HashSet();  
        h.add(new Person("shenm",10));  
        h.add(new Person("shenm2",6));  
        h.add(new Person("shenm1",30));  
        h.add(new Person("shenm0",10));  
        h.add(new Person("shenm0",10));  
         
        getOut(h);  
  
    }  
  
    //取出元素  
    public static void getOut(HashSet h)  
    {  
        for (Iterator it=h.iterator(); it.hasNext(); )  
        {  
            Person p=(Person)it.next();  
            sop(p.getName()+"..."+p.getAge());  
        }  
    }  
  
    //打印  
    public static void sop(Object obj)  
    {  
        System.out.println(obj);  
    }  
}  

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马