在C++的标准库中,ArrayList和LinkedList之间的使用差异以及各自的优缺点也同样反映于vector和list。
6. HashSet: 散列表为每个对象计算出一个整数(通过Object缺省的或类重载的hashCode域方法),称为散列码。在Java中,散列表是使用链表的数组来实现的,每个链表被称为一个哈希桶。如果想在哈希表中查找一个对象,则需要先计算对象的hashCode,之后对表内的桶数取余数,得到的结果就是哈希桶的索引,此时如果该桶为空桶,就可以直接将该对象插入到该桶中,如果已经有对象存在了,则需要逐个进行比较,一旦发现该与该对象相等的对象(equals() 返回true),就会放弃本次插入操作,否则将该对象插入到该桶的末端。HashSet在构造的时候提供两个参数,一个是initialCapacity 指定了桶的数量(实际的桶数为2的initialCapacity次幂),另一个是loadFactortian(0.0--1.0,推荐值为0.75),当桶的填充百分比达到该值后,哈希表内的哈希桶数将double,重新填充已有对象,该操作被称为rehash,rehash是十分影响效率的操作,因为为了尽可能避免该事件的发生,因可能在构造HashSet的时候给出一个合理的参数。以下为HashSet的常用示例代码:
1 public static void showAddAndIterator() {
2 HashSet
3 hs.add("B");
4 hs.add("A");
5 hs.add("D");
6 hs.add("E");
7 hs.add("C");
8 hs.add("F");
9 System.out.println(hs);
10 Iterator
11 while (it.hasNext())
12 System.out.println(it.next());
13 }
14 public static void showRemoveAndClearAndContains() {
15 HashSet
16 hSet.add(new Integer("1"));
17 hSet.add(new Integer("2"));
18 hSet.add(new Integer("3"));
19 System.out.println(hSet.contains(new Integer("3")));
20 System.out.println(hSet);
21 boolean blnRemoved = hSet.remove(new Integer("2"));
22 System.out.println(hSet.contains(new Integer("2")));
23 System.out.println(blnRemoved);
24 System.out.println(hSet);
25 hSet.clear();
26 System.out.println(hSet);
27 System.out.println(hSet.isEmpty());
28 }
29
30 public static void showToArrayListAndArray() {
31 HashSet
32 hs.add("B");
33 hs.add("A");
34 hs.add("D");
35 System.out.println(hs);
36 List
37 Object[] objects = list.toArray();
38 for (Object obj : objects)
39 System.out.println("Object = " + obj);
40 String[] strs = list.toArray(new String[0]);
41 for (String str : strs)
42 System.out.println("String = " + str);
43 }
44
45 public static void showToHashSetAndRemoveDuplicate() {
46 Integer[] numbers = { 7, 7, 8, 9, 10, 8, 8, 9, 6, 5, 4 };
47 List
48 Set
49 for (Integer o : set)
50 System.out.print(o + ", ");
51 }
52
53 public static void showMinMax() {
54 HashSet
55 hashSet.add(new Long("9"));
56 hashSet.add(new Long("4"));
57 hashSet.add(new Long("2"));
58 hashSet.add(new Long("2"));
59 hashSet.add(new Long("3"));
60 Object objMin = Collections.min(hashSet);
61 System.out.println("Minimum Element of Java HashSet is : " + objMin);
62 Object objMax = Collections.max(hashSet);
63 System.out.println("Maximum Element of Java HashSet is : "+ objMax);
64 }
65
66 public static void showSynchronizedSet() {
67 HashSet hashSet = new HashSet();
68 Set set = Collections.synchronizedSet(h