1 package cn.itcast.p2.toolclass.collections.demo; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.Comparator; 6 import java.util.List; 7 import java.util.TreeSet; 8 9 import cn.itcast.p2.comparator.ComparatorByLength; 10 11 public class CollectionsDemo { 12 13 public static void main(String[] args) { 14 /* 15 * Collections:是集合框架的工具类。 16 * 里面的方法都是静态的。 17 */ 18 19 demo_4(); 20 21 } 22 23 public static void demo_4() { 24 List<String> list = new ArrayList<String>(); 25 26 list.add("abcde"); 27 list.add("cba"); 28 list.add("aa"); 29 list.add("zz"); 30 list.add("cba"); 31 list.add("nbaa"); 32 Collections.sort(list); 33 System.out.println(list); 34 35 /* 36 * 替换 37 * static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) 38 * 使用另一个值替换列表中出现的所有某一指定值。 39 * 40 * 随机置换 41 * static void shuffle(List<?> list) 42 * 使用默认随机源对指定列表进行置换。 43 * static void shuffle(List<?> list, Random rnd) 44 * 使用指定的随机源对指定列表进行置换。 45 * 46 * 替换 47 * static <T> void fill(List<? super T> list, T obj) 48 * 使用指定元素替换指定列表中的所有元素。 49 */ 50 Collections.replaceAll(list, "cba", "nba"); 51 System.out.println(list); 52 53 Collections.shuffle(list); 54 System.out.println(list); 55 56 Collections.fill(list, "ccc"); 57 System.out.println(list); 58 59 } 60 /* 61 * demo_4结果:[aa, abcde, cba, cba, nbaa, zz] 62 [aa, abcde, nba, nba, nbaa, zz] 63 [abcde, zz, nba, aa, nbaa, nba] 每次运行结果都不同 64 [ccc, ccc, ccc, ccc, ccc, ccc] 65 66 */ 67 68 public static void demo_3() { 69 /* 70 * 反转顺序 71 * static <T> Comparator<T> reverseOrder() 72 * 返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。 73 * static <T> Comparator<T> reverseOrder(Comparator<T> cmp) 74 * 返回一个比较器,它强行逆转指定比较器的顺序。 75 */ 76 TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new ComparatorByLength())); 77 78 ts.add("abc"); 79 ts.add("cba"); 80 ts.add("hahaha"); 81 ts.add("aa"); 82 ts.add("zzz"); 83 84 System.out.println(ts); 85 } 86 /* 87 * demo_3运行结果: [hahaha, zzz, cba, abc, aa] 88 */ 89 90 public static void demo_2() { 91 List<String> list = new ArrayList<String>(); 92 93 list.add("abcde"); 94 list.add("cba"); 95 list.add("aa"); 96 list.add("zz"); 97 list.add("cba"); 98 list.add("nbaa"); 99 Collections.sort(list); 100 System.out.println(list); 101 102 /* 103 * 二分搜索法 104 * static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) 105 * static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 106 */ 107 int index = Collections.binarySearch(list, "cba"); 108 System.out.println("index:"+index); //2 109 int index2 = Collections.binarySearch(list, "aaa"); 110 System.out.println("index:"+index2); //-2 如果没有所要搜寻的key存在,则返回(-(插入点)-1) 111 112 /* 113 * 获取最大值 114 * static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) 115 * 根据元素的自然顺序,返回给定 collection 的最大元素。 116 * static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) 117 * 根据指定比较器产生的顺序,返回给定 collection 的最大元素。 118 * 119 * 获取最小值 类似上面 120 */ 121 String max = Collections.max(list, new ComparatorByLength()); 122 System.out.println("max:"+max); 123 124 } 125 126 public static void demo_1() { 127 List<String> list = new ArrayList<String>(); 128 129 list.add("abcde"); 130 list.add("cba"); 131 list.add("aa"); 132 list.add("zz"); 133 list.add("cba"); 134 list.add("nbaa"); 135 136 System.out.println(list); 137 138 /* 139 * 两种比较方式 140 */ 141 142 //对list集合进行指定顺序的排序。 143 //static <T extends Comparable<? super T>> void sort(List<T> list) 144 Collections.sort(list); 145 // mySort(list); //sort的执行原理 146 System.out.println(list); 147 148 //static <T> void sort(List<T> list, Comparator<? super T> c) 149 Collections.sort(list, new ComparatorByLength()); 150 // mySort(list , new ComparatorByLength()); // 上一条代码的执行原理 151 System.out.println(list); 152 } 153 154 //sort(List<T> list, Comparator<? super T> c) 执行原理 155 public static <T> void mySort(List<T> list, Comparator<? super T> comp) { 156 for (int i=0; i<list.size()-1; i++) 157 for (int j=i+1; j<list.size(); j++) 158 { 159 if (comp.compare(list.get(i), list.get(j)) > 0) 160 Collections.swap(list, i, j); 161 } 162 } 163 164 //sort(List<T> list)的执行原理 165 public static <T extends Comparable<? super T>> void mySort(List<T> list) { 166 167 for (int i=0; i<list.size()-1; i++) 168 for (int j=i+1; j<list.size(); j++) 169 { 170 if (list.get(i).compareTo(list.get(j)) > 0) 171 Collections.swap(list, i, j); //交换两个元素 172 } 173 } 174 175 }