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

2014-11-24 03:19:39 · 作者: · 浏览: 0

1. Java集合类库中最重要的两个接口Collection和Map,其中Collection接口又再次划分为List和Set两大子接口,List中可以包含重复的元素,Set中则不可以。以下列举出一些常用的集合实现类,他们均分别继承自这两个接口:

1) ArrayList: 一种可以动态增长和缩减的索引序列(动态数组,类似于C++中的vector);

2) LinkedList: 一种可以在任何位置进行高效的插入和删除操作的有序序列(类似于C++中list);

3) ArrayDeque: 一种用循环数组实现的双端队列(类似于C++中的deque);

4) HastSet:一种没有重复元素的无序集合(C++的标准库中并未提供hashset集合,但是Windows的VC和Linux平台下的gcc均各自提供了hashset容器);

5) TreeSet: 一种有序集(类似于C++中的set);

6) EnumSet: 一种包含枚举类型值的集;

7) LinkedHashSet: 一种可以记住元素插入次序的集,在其内部由LinkedList负责维护插入的次序,HashSet来维护Hash;

8) HashMap:一种存储键值对关联的数据结构(C++的标准库中并未提供hashmap集合,但是Windows的VC和Linux平台下的gcc均各自提供了hashmap容器);

9) TreeMap:一种键值有序排列的映射表(类似于C++中的map);

10) EnumMap:一种键值属于枚举类型的映射表;

11) LinkedHashMap:一种可以记住键值项插入次序的映射表;

2. ArrayList:该集合的底层是通过动态数组来实现的,集合构造的时候可以指定一个初始容量,当插入的元素过多导致已有的容量不能容纳新元素是,其底层数组的容量将自动增长原有容量的1.5 倍,这样会带来一定的空间浪费,但是为了避免经常扩张而带来的性能开销,只能是用空间换取时间了。如果在容器的中间添加或者删除一个元素都将会导致后面的元素向后或向前移动一个位置,如果元素数量较多且该操作比较频繁,将会导致系统的性能降低,然而对于容器中元素的随机访问性能较好,以下为ArrayList的常用示例代码:

1 public static void showIterator() {

2 ArrayList list = new ArrayList();

3 list.add("Monday");

4 list.add("Tuesdag");

5 list.add("Wednesday");

6 Iterator iterator = null;

7 iterator = list.iterator();

8 //while

9 while (iterator.hasNext()) {

10 String element = iterator.next();

11 System.out.println(element);

12 }

13 //for

14 for (iterator = list.iterator(); iterator.hasNext();) {

15 String element = iterator.next();

16 System.out.println(element);

17 }

18 //for each

19 for (String element : list) {

20 System.out.println(element);

21 }

22 }

23

24 public static void showSetAndGet() {

25 ArrayList nums = new ArrayList();

26 nums.clear();

27 nums.add("One");

28 nums.add("Two");

29 nums.add("Three");

30 System.out.println(nums);

31 nums.set(0, "Uno");

32 nums.set(1, "Dos");

33 nums.set(2, "Tres");

34 for (int i = 0; i < nums.size(); ++i)

35 System.out.println(nums.get(i));

36 }

37

38 public static void showRemoveAndSize() {

39 ArrayList al = new ArrayList();

40 System.out.println("Initial size of al: " + al.size());

41 al.add("C");

42 al.add("A");

43 al.add("E");

44 al.add("B");

45 al.add(1, "A2");

46 System.out.println("Size of al after additions: " + al.size());

47 System.out.println("Contents of al: " + al);

48 al.remove("F");

49 al.remove(2);

50 System.out.println("Size of al after deletions: " + al.size());

51 System.out.println("Contents of al: " + al);

52 Iterator it = al.iterator();

53 //Notes:remove() must be called after next()

54 it.next();

55 it.remove();

56 System.out.println("Size of al after deletions: " + al.size());

57 System.out.println("Contents of al: " + al);

58 }

59

60 public static void showSubListAndCopyToArray(