Step By Step(Java 集合篇) (五)

2014-11-24 03:19:39 · 作者: · 浏览: 2
nkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

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 hs = new 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 it = hs.iterator();

11 while (it.hasNext())

12 System.out.println(it.next());

13 }

14 public static void showRemoveAndClearAndContains() {

15 HashSet hSet = new 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 hs = new HashSet();

32 hs.add("B");

33 hs.add("A");

34 hs.add("D");

35 System.out.println(hs);

36 List list = new ArrayList(hs);

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 list = Arrays.asList(numbers);

48 Set set = new HashSet(list);

49 for (Integer o : set)

50 System.out.print(o + ", ");

51 }

52

53 public static void showMinMax() {

54 HashSet hashSet = new 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