Set(集)

Set是最简单的一种集合,集合中的对象不按特定方式排序,并且没有重复对象,Set接口主要有两个实现类:HashSet和TreeSet。HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。HashSet类还提供了一个子类LinkedHashSet类,它不仅实现了哈希算法,而且实现了链表数据结构,链表数据结构能提高插入和删除元素的性能。TreeSet类实现了SortedSet接口,具有排序功能。

 

1.2.1 Set的一般用法

Set集合中存放的是对象的引用,并且没有重复对象。无序的。

public static void main(String[] args) {

       Set<String> set  = new HashSet<String>();

       String s1 = new String("hello");

       String s2 = s1;

       String s3 = new String("world");

       set.add(s1);

       set.add(s2);

       set.add(s3);

       System.out.println(set.size());

    }

以上程序打印结果为:2

实际上只向Set集合加入了两个对象。

Set采用equals()方法比较两个对象是否相等,而不是采用==比较运算符。

 

1.2.2 HashSet类

HashSet类按照哈希算法来存取集合中的对象,具有很好的存取和查找性能。当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。

 

在Object类中定义了hashCode()和equals()方法,Object类的equals()方法按照内存地址比较对象是否相等,因此如果object1.equals(object2)为true,则表明object1变量和object2变量实际上引用同一个对象,那么object1和object2的哈希码也肯定相同。

 

为了保证HashSet正常工作,如果一个类覆盖了equals()方法,也应该覆盖hashCode()方法,并且保证两个相等的对象的哈希码也一样。

 

1.2.3 TreeSet类

TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。

posted @ 2012-03-06 00:27  haiwei.sun  阅读(183)  评论(0编辑  收藏  举报
返回顶部