日期:2014-05-20  浏览次数:20798 次

HashSet的用法
我定义了一个数组,里面的内容是{one   two   three   four   five   six   seven}
我调用test(new   HashSet())时,显示的结果是什么?HashSet是按照什么次序显示?TreeSet()是不是按首字母次序显示,而LinkedHashSet()是按照插入的次序显示?

------解决方案--------------------
呵呵 就知道Hashset 和Treeset 就是在定义set的时候 如果你定义的set 里面的值有改变的话 用Treeset比Hashset较快 一般是通过迭代器iterator来 使用的
就是 一个if语句 判断是否有下一个 然后 取它的下一个 这个是套路 具体为什么要这样做我也不知道 反正我看的程序 别人都这样写 具体原因我就不知道了
------解决方案--------------------
那HashSet()的输出结果难道是不一定的?但是好像上面的输出结果是唯一的啊?
-----------------------
结果是一定的,因为你放元素进去的时候,每一个元素的hashcode已经确定了,只能说他输出的结果
不具有想像性,也就是不一定是按大小排序,也不一定按放的先后顺序.(实际上如果你重载了Object的hashCode()函数的话,也能达到你想要的排序效果)
TreeSet是自动排序的.
------解决方案--------------------
附上一例子
import java.util.*;
class HashCodeTest{
private int i;
public HashCodeTest(int i){
this.i = i;
}
public String toString(){
return " "+i;
}
/*public boolean equals(Object o){
HashCodeTest a = (HashCodeTest)o;
return (a.i==i) ? true : false ;
}*/
public int hashCode(){
return i;
}
}

public class TestHashCodeTest{
public static void main(String[] args){
HashSet set = new HashSet();
for(int i = 0;i <=3;i++)
set.add(new HashCodeTest(i));
System.out.println(set);
set.add(new HashCodeTest(1));
System.out.println(set);
System.out.println(set.contains(new HashCodeTest(0)));
System.out.println(set.add(new HashCodeTest(1)));
System.out.println(set.add(new HashCodeTest(4)));
System.out.println(set);
}
}
//注释equals
/*输出
[ 0, 1, 2, 3]
[ 0, 1, 1, 2, 3]
false
true
true
[ 0, 1, 1, 1, 2, 3, 4]
请按任意键继续. . .
*/
//注释hashCode
/*输出
[ 2, 1, 0, 3]
[ 2, 1, 0, 3, 1]
false
true
true
[ 2, 1, 1, 0, 3, 4, 1]
请按任意键继续. . .
*/
//两个都注释
//输出
/*
[ 2, 1, 0, 3]
[ 2, 1, 0, 3, 1]
false
true
true
[ 2, 1, 1, 0, 3, 4, 1]
请按任意键继续. . .
*/
//两个都不注释
//输出
/*
[ 0, 1, 2, 3]
[ 0, 1, 2, 3]
true
false
true
[ 0, 1, 2, 3, 4]
请按任意键继续. . .
*/