现在的位置: 首页 > 综合 > 正文

黑马程序员_java Collection子接口 Set (HashSet TreeSet)

2013年02月24日 ⁄ 综合 ⁄ 共 1479字 ⁄ 字号 评论关闭
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
set集合特点元素无序(存入和取出的顺序不一定一致),元素不可以重复。
Set集合的功能和Collection是一致的
Set
----HashSet:底层结构是哈希表(需复写 haseCode和equals)
    HashSet是如何保证元素唯一性:通过元素的两个方法,hashCode和equals来完成。
    如果元素的hashCode值相同,才会判断equals来完成。
    如果hashCode值不同,不会调用equals方法。
public int hasCode()
{
    return name.haseCode()*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;
}
HashSet判断和删除的依据
contains();remove();
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode()和equals()方法。
----TreeSet:
特点:可以对Set集合中的元素进行排序
底层数据结构是二叉树
保证元素唯一性的依据:compareTo方法return 0
TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现comparable接口,覆盖compareTo方法,这种方式为元素的自然顺序。
TreeSet排序的第二种方式:当元素自身不具备比较性,或者具备的比较性不是所需要的。这时需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
Comparator接口,覆盖compare()方法
TreeSet练习:按照字符串长度排序
package com.demo;
import java.util.*;
public class TreeSetDemo {
//使用比较器
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet ts=new TreeSet(new StrLenComparator());
ts.add("abcd");
ts.add("cc");
ts.add("cba");
ts.add("aaa");
ts.add("z");
ts.add("haha");
Iterator it=ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
class StrLenComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
//判断主要条件
String s1=(String)o1;
String s2=(String)o2;
/*
if(s1.length()>s2.length())
return 1;
if(s1.length()==s2.length())
return 0;
return -1;
*/
//简化方式
int num=new Integer(s1.length()).compareTo(s2.length());
//判断次要条件
if(num==0)
return s1.compareTo(s2);
return num;
}
}
 

抱歉!评论已关闭.