黑马程序员技术交流社区

标题: 个人总结Set集合的特点 [打印本页]

作者: 唐志兵    时间: 2012-6-11 11:23
标题: 个人总结Set集合的特点
Set:集合里面的元素是无序的(存入和取出的顺序不一致),元素不可以重复。

HashSet:底层数据结构是哈希表,线程是非同步的。

HashSet是如何保证元素的唯一性的呢?

1,是通过元素的两个方法,hashCode和equals。

2,如果两个hashCode值相同,才会判断equals是否为true。

3,如果元素的HashCode值不同,不会调用equals。

对于判断元素是否存在,以及删除等操作,依赖的也是元素的hashCode和equals方法。



TreeSet:可以对集合中的元素进行排序。

1,添加的元素一定要具有比较性。

2,什么是比较性,比较性就是指一个对象是否拥有compareTo方法

3,自己创建的类没有比较方法怎么办?可以让类实现 Comparable接口,并实现其中的compareTo方法。

4,排序时,当主要条件相同时,一定要判断一下次要条件。

TreeSet源码实例
  1. import java.util.TreeSet;
  2. import java.util.Iterator;

  3. public class TreeSetTest {
  4. private static void printString(Object next) {
  5.   System.out.println(next);
  6.   
  7. }
  8. public static void main(String[] args) {
  9.   TreeSet ts = new TreeSet();
  10.   ts.add(new myStudent("lisi02",22));
  11.   ts.add(new myStudent("lisi07",25));
  12.   ts.add(new myStudent("lisi04",23));
  13.   ts.add(new myStudent("lisi05",24));
  14.   ts.add(new myStudent("lisi08",24));
  15.   ts.add(new myStudent("lisi06",26));  //
  16.   Iterator it = ts.iterator();
  17.   while(it.hasNext()){
  18.    printString(((myStudent)it.next()).getName());
  19.    
  20.   }
  21. }

  22. }

  23. class myStudent implements Comparable{   //强制让这个类具备比较性
  24. private String name;
  25. private int age;

  26. public myStudent(String name,int age) {
  27.   this.name = name;
  28.   this.age = age;
  29. }
  30. public String getName() {
  31.   return name;
  32. }
  33. public int getAge() {
  34.   return age;
  35. }
  36. @Override
  37. public int compareTo(Object o) {
  38.   myStudent ms = (myStudent)o;
  39.   System.out.println(this.getName() + " compareTo " + ms.getName());
  40.   if(!(ms instanceof myStudent)){
  41.    return 0;
  42.   }
  43.   if(this.age > ms.age)
  44.    return 1;
  45.   if(this.age == ms.age)
  46.    return this.name.compareTo(ms.name);
  47.   return -1;
  48. }
  49. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2