天天看点

java笔记四:Set接口

 set不保存重复的元素。set中最常被使用的是测试归属性,你可以很容易的询问某个对象是否在某个set中。set具有与collection完全一样的接口,因此没有任何额外的功能。实际上set就是collection,只是行为不同。

  实现了set接口的主要有hashset、treeset、linkedhashset这几个共同点就是每个相同的项只保存一份。他们也有不同点,区别如下:

  1.hashset:

  hashset使用的是相当复杂的方式来存储元素的,使用hashset能够最快的获取集合中的元素,效率非常高(以空间换时间)。会根据

hashcode和equals来庞端是否是同一个对象,如果hashcode一样,并且equals返回true,则是同一个对象,不能重复存放。

<a></a>

正如上例所示,重写了hashcode()和equals()方法来区分同意对象后,就不能存放同以对象了。如果注释这两个方法,则所有student对象视为不同对象,都可以存放。

  2.treeset

  treeset也不能存放重复对象,但是treeset会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。

  ①自然排序:treeset要添加哪个对象就在哪个对象类上面实现java.lang.comparable接口,并且重写comparato()方法,返回0则表示是同一个对象,否则为不同对象。

  ②客户排序:建立一个第三方类并实现java.util.comparator接口。并重写方法。定义集合形式为treeset ts = new treeset(new 第三方类());

下面一个例子用treeset存放自然排序的对象:

输出结果为:

1

2

3

4

5

下面一个例子用treeset存放客户排序的对象:

大家都知道list存放时按照插入顺序排序的,其实也可以用自然排序和客户排序对list集合排序,大家请看:

[5, 1, 2, 4, 3]

[1, 2, 3, 4, 5]

[5, 4, 3, 2, 1]

  3.linkedhashset

  linkedhashset按照插入顺序保存对象,同时还保存了hashset的查询速度。