---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
| ----set:元素是无序的(存入和取出的顺序不一定是一致的),元素不可以重复。
| -------HashSet:底层数据结构是哈希表。
| -------TreeSet:可以对set集合中的元素进行排序,底层数据结构是二叉树。
| -------HashSet是如何保证元素的唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成,如果元素的HashCode值相同,才会判断equals是否为True,如果元素的HashCode的值不同,
不会调用equals的方法。
注意:对于判断元素是否存在,以及删除等等操作,依赖的方法是元素的hashcode和equals方法。
| -------TreeSet是如何保证元素的唯一性的呢?
是通过compareTo方法return 0.
TreeSet排序的第一种方式:
让元素自身具备比较性。元素要实现Comparable接口,覆盖cmpareTo方法,这种方式也成为元素的自然排序,或者叫做默认顺序。
TreeSet排序的第二种方式:
当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。
下面的例子:
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
public class SetTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
HashSet ht = new HashSet();
ht.add("A");
ht.add("D");
ht.add("C");
ht.add("B");
ht.add("T");
//ht.add(null);//去掉注释运行,可以运行
TreeSet ts = new TreeSet();
//ts.add(null);//去掉注释运行,不可以运行
ts.add("A");
ts.add("E");
ts.add("B");
ts.add("C");
ts.add("W");
Iterator it = ht.iterator();
while(it.hasNext()){
System.out.println("========"+it.next());;
}
Iterator ti = ts.iterator();
while(ti.hasNext()){
System.out.println(">>>>>>>."+ti.next());;
}
}
}
运行可以看出明显,
1、Treeset中的数据是自动排好序的,不允许放入null值
2、HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束
3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。而同一个类的对象可以放入不同的实例,但是如果想按指定的对象属性来判断是否为相同对象的话,可以自己重写hashCode()方法来实现。
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------