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接口,能够对集合中的对象进行排序。