Java 集合篇
1.??? Java集合类库中最重要的两个接口Collection<E>和Map<K,V>,其中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<String> list = new ArrayList<String>(); 3 list.add("Monday"); 4 list.add("Tuesdag"); 5 list.add("Wednesday"); 6 Iterator<String> 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<String> nums = new ArrayList<String>(); 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<String> al = new ArrayList<String>(); 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<String> 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() { 61 ArrayList<String> arrayList = new ArrayList<String>(); 62 arrayList.add("1"); 63 arrayList.add("2"); 64 arrayList.add("3"); 65 arrayList.add("4"); 66 arrayList.add("5"); 67 List<String> lst = arrayList.subList(1, 3); 68 for (int i = 0; i < lst.size(); i++) 69 System.out.println(lst.get(i)); 70 // remove one element from sub list 71 String obj = lst.remove(0); 72 System.out.println(obj + " is removed"); 73 for (String str: arrayList) 74 System.out.println(str); 75 //get object array with normal method 76 Object[] objArray = arrayList.toArray(); 77 for (Object obj1 : objArray) 78 System.out.println(obj1); 79 //get object array with generic method 80 String[] strArray = arrayList.toArray(new String[0]); 81 for (String str : strArray) 82 System.out.println(str); 83 } 84 85 public static void showListIterator() { 86 ArrayList<String> aList = new ArrayList<String>(); 87 aList.add("1"); 88 aList.add("2"); 89 aList.add("3"); 90 aList.add("4"); 91 aList.add("5"); 92 93 ListIterator<String> listIterator = aList.listIterator(); 94 while (listIterator.hasNext()) { 95 System.out.println(listIterator.next()); 96 System.out.println("Previous: " + listIterator.previousIndex()); 97 System.out.println("Next: " + listIterator.nextIndex()); 98 } 99 while (listIterator.hasPrevious()) {100 System.out.println(listIterator.previous());101 System.out.println("Previous: " + listIterator.previousIndex());102 System.out.println("Next: " + listIterator.nextIndex());103 }104 listIterator = aList.listIterator(2);105 listIterator.next();106 listIterator.set("100");107 listIterator.next();108 listIterator.remove();109 for (String str : aList)110 System.out.println(str);111 112 if (aList.contains("4"))113 System.out.println("True");114 else115 System.out.println("False");116 }117 118 public static void showFillAndReplace() {119 ArrayList<String> arrayList = new ArrayList<String>();120 arrayList.add("A");121 arrayList.add("B");122 arrayList.add("A");123 arrayList.add("C");124 arrayList.add("D");125 Collections.replaceAll(arrayList, "A", "Replace All");126 System.out.println(arrayList);127 Collections.fill(arrayList, "REPLACED");128 System.out.println(arrayList);129 }130 131 public static void showCollectionOperation() {132 List<String> colours = new ArrayList<String>();133 colours.add("red");134 colours.add("green");135 colours.add("blue");136 137 System.out.println(colours);138 Collections.swap(colours, 0, 2);139 System.out.println(colours);140 141 Collections.reverse(colours);142 System.out.println(colours);143 144 Collections.sort(colours);145 System.out.println(Arrays.toString(colours.toArray()));146 Collections.sort(colours, Collections.reverseOrder());147 System.out.println(Arrays.toString(colours.toArray()));148 149 int index = Collections.binarySearch(colours, "green");150 System.out.println("Element found at : " + index);151 ArrayList<Integer> arrayList = new ArrayList<Integer>();152 arrayList.add(new Integer("3"));153 arrayList.add(new Integer("1"));154 arrayList.add(new Integer("8"));155 arrayList.add(new Integer("3"));156 arrayList.add(new Integer("5"));157 System.out.println(Collections.min(arrayList));158 System.out.println(Collections.max(arrayList));159 }160 161 public static void showMinMax() {162 ArrayList<Integer> arrayList = new ArrayList<Integer>();163 arrayList.add(new Integer("3"));164 arrayList.add(new Integer("1"));165 arrayList.add(new Integer("8"));166 arrayList.add(new Integer("3"));167 arrayList.add(new Integer("5"));168 System.out.println(Collections.min(arrayList));169 System.out.println(Collections.max(arrayList));170 }171 172 public static void showSynchronizedList() {173 ArrayList arrayList = new ArrayList();174 List list = Collections.synchronizedList(arrayList);175 //list之后的并发操作将不再需要synchronized关键字来进行同步了。176 }转自:http://www.cnblogs.com/stephen-liu74/archive/2011/08/26/2155082.html