操纵Sets[Java编程]
本文“操纵Sets[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Set拥有与Collection完好相同的接口,所以和两种差别的List差别,它没有什么额外的功效.相反,Set完好就是一个Collection,只是具有差别的行为(这是实例和多形性最抱负的利用:用于表达差别的行为).在这里,一个Set只答应每个对象存在一个实例(正如大家今后会看到的那样,一个对象的“值”的构成是相当复杂的).
Set(接口) 增添到Set的每个元素都必须是举世无双的;不然Set就不会增添反复的元素.增添到Set里的对象必须定义equals(),从而成立对象的唯一性.Set拥有与Collection完好相同的接口.一个Set不能保证自己可按任何特定的次序保持自己的元素
HashSet* 用于除非常小的以外的全部Set.对象也必须定义hashCode()
ArraySet 由一个数组后推得到的Set.面向非常小的Set计划,分外是那些需求频繁成立和删除的.关于小Set,与HashSet相比,ArraySet成立和反复所需付出的代价都要小得多.但随着Set的增大,它的性能也会大打折扣.不需求HashCode()
TreeSet 由一个“红黑树”后推得到的次序Set(注释⑦).这样一来,我们便可以从一个Set里提到一个次序调集
⑦:直至本书写作的时刻,TreeSet仍旧只是公布,还没有正式实现.所以这里没有供应利用TreeSet的例子.
Set (interface) |
Each element that you add to the Set must be unique; otherwise the Set doesn’t add the duplicate element. Objects added to a Set must define equals() to establish object uniqueness. Set has exactly the same interface as Collection. The Set interface does not guarantee it will maintain its elements in any particular order. |
HashSet* |
For Sets where fast lookup time is important. Objects must also define hashCode(). |
TreeSet |
An ordered Set backed by a red-black tree. This way, you can extract an ordered sequence from a Set. |
下面这个例子并没有列出用一个Set可以做的全部事情,因为接口与Collection是相同的,前例已经操练过了.相反,我们要例示的重点在于使一个Set举世无双的行为:
//: Set1.java // Things you can do with Sets package c08.newcollections; import java.util.*; public class Set1 { public static void testVisual(Set a) { Collection1.fill(a); Collection1.fill(a); Collection1.fill(a); Collection1.print(a); // No duplicates! // Add another set to this one: a.addAll(a); a.add("one"); a.add("one"); a.add("one"); Collection1.print(a); // Look something up: System.out.println("a.contains(\"one\"): " + a.contains("one")); } public static void main(String[] args) { testVisual(new HashSet()); testVisual(new TreeSet()); } } ///:~
反复的值被增添到Set,但在打印的时刻,我们会发现Set只承受每个值的一个实例.
运行这个程序时,会注意到由HashSet保持的次序与ArraySet是差别的.这是由于它们采取了差别的办法来保存元素,以便它们今后的定位.ArraySet保持着它们的次序状况,而HashSet利用一个散列函数,这是分外为快速检索计划的).成立自己的范例时,一定要注意Set需求通过一种方法来保持一种存储次序,就象本章早些时刻展示的“groundhog”(土拔鼠)例子那样.下面是一个例子:
对equals()及hashCode()的定义遵循“groundhog”例子已经给出的情势.在两种情形下都必须定义一个equals().但只有要把类置入一个HashSet的前提下,才有必要利用hashCode()——这种情形是完好有大概的,因为普通应先挑选作为一个Set实现.//: Set2.java // Putting your own type in a Set package c08.newcollections; import java.util.*; class MyType implements Comparable { private int i; public MyType(int n) { i = n; } public boolean equals(Object o) { return (o instanceof MyType) && (i == ((MyType)o).i); } public int hashCode() { return i; } public String toString() { return i + " "; } public int compareTo(Object o) { int i2 = ((MyType) o).i; return (i2 < i -1 : (i2 == i 0 : 1)); } } public class Set2 { public static Set fill(Set a, int size) { for(int i = 0; i < size; i++) a.add(new MyType(i)); return a; } public static Set fill(Set a) { return fill(a, 10); } public static void test(Set a) { fill(a); fill(a); // Try to add duplicates fill(a); a.addAll(fill(new TreeSet())); System.out.println(a); } public static void main(String[] args) { test(new HashSet()); test(new TreeSet()); } } ///:~
以上是“操纵Sets[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:操纵Maps
- ·下一篇文章:操纵Lists
- ·中查找“操纵Sets”更多相关内容
- ·中查找“操纵Sets”更多相关内容