---------------------- android培训java培训、期待与您交流! ----------------------

java学习日记(8)———set集合的一些注意问题

      关于set集合和一些排序问题,困扰了我一段时间,对于set集合,她和list不同,因为她内部不能放重复的元素,元素是无序的,也就是说存入和取出的顺序不一定一致,比如说HashSet:底层数据结构是哈希表,结构的,把字符串往里面存还还好,不过一旦存自己定义的元素,就会有些问题需要注意了往hashSet集合中存入自定对象,假如往hashSet集合中存入自定对象姓名和年龄相同为同一个人,重复元素。我们要先想HashSet是如何保证元素唯一性的呢?他是通过元素的两个方法,hashCodeequals来完成。如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashcode值不同,不会调用equals。
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}

public int hashCode()
{
System.out.println(this.name+"....hashCode");
return name.hashCode()+age*37;
}

public boolean equals(Object obj)
{

if(!(obj instanceof Person))
return false;

Person p = (Person)obj;
System.out.println(this.name+"...equals.."+p.name);

return this.name.equals(p.name) && this.age == p.age;
}


public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}

      这里面姓名和年龄一样才算是同一个元素,首先我们应该复写equals方法,因为是同一个人东方人标准是有我们定义的所以要复写父类,因为我们要先判断hashcode,如果hashcode相同,继续判断equals,所以hashcode,equals耳麦都有必要复写下面是关于treeset的排序得一些方法:
|--TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.

TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。

TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。

 

posted on 2012-02-03 02:12  苏格拉底的弟子  阅读(273)  评论(0编辑  收藏  举报

---------------------- android培训java培训、期待与您交流! ----------------------