Collections中的sort方法使用
public class ListDemo { public static void main(String[] args) { List<String> lis = new ArrayList(); lis.add("asd"); lis.add("bvc"); lis.add("adv"); lis.add("sasd"); lis.add("aaas"); // 排序前 System.out.println(lis);// [asd, bvc, adv, sasd, aaas] // 排序后 Collections.sort(lis); System.out.println(lis);// [aaas, adv, asd, bvc, sasd] //按照自定议的方式进行排序 Collections.sort(lis,new StringLengthSort()); System.out.println(lis);//[adv, asd, bvc, aaas, sasd] } } // 定义一个按照字符串的长度比较器类 class StringLengthSort implements Comparator<String> { @Override public int compare(String s1, String s2) { //先根据字符串的长度进行排序 if (s1.length() > s2.length()) return 1; if (s1.length() < s2.length()) return -1; //如果长度相同,再根据内容进行排序 return s1.compareTo(s2); } }
Collections中的求集合元素的最大值
public class ListDemo { public static void main(String[] args) { List<String> lis = new ArrayList(); lis.add("asd"); lis.add("bvc"); lis.add("adv"); lis.add("sasd"); lis.add("aaas"); // 对集合元素取最大值操作 String max = Collections.max(lis); // 输出最大值 System.out.println(max);// sasd List<Integer> list = new ArrayList(); list.add(245); list.add(33); list.add(785); list.add(524); list.add(2); // 对集合元素取最大值操作 int max1 = Collections.max(list); // 输出最大值 System.out.println(max1);// 785<pre name="code" class="java">}
public class ListDemo { public static void main(String[] args) { List<String> lis = new ArrayList(); lis.add("asd"); lis.add("bvc"); lis.add("adv"); lis.add("sasd"); lis.add("aaas"); //需要调用sort方法进行集合排序 int index = Collections.binarySearch(lis, "sasd"); System.out.println("sasd 的角标是:"+index);//sasd 的角标是:3 } }详细说明:
public static <T> int binarySearch(List<? extends Comparable<? super T>> list,T key)使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过
sort(List)
方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个,
list
- 要搜索的列表。
key
- 要搜索的键。
ClassCastException
- 如果列表中包含不
可相互比较 的元素(例如,字符串和整数),或者搜索键无法与列表的元素进行相互比较。
// 定义一个二分法查找方法 public static int dichotomyLookUpIndex(List<String> list, String key) { int min = 0;// 记录最小值角标,默认为集合的开始位置 int mid; // 记录中间值位置 int max = list.size();;// 记录最大值位置 while (min <= max) { // 得出中间值位置 key mid = (min + max) / 2; // 根据key来获取集合中对应的值 String str = list.get(mid); // 进行比较 int num = str.compareTo(key); // 按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。 // 按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。 // 如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。 // 如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0 if (num > 0) { max = mid - 1; } else if (num < 0) { min = mid + 1; } else { return mid; } } return -min - 1; } }
public class ListDemo { public static void main(String[] args) { List<String> lis = new ArrayList(); lis.add("asd"); lis.add("bvc"); lis.add("adv"); lis.add("sasd"); lis.add("aaas"); System.out.println("原集合数据:"+lis);//原集合数据:[asd, bvc, adv, sasd, aaas] //替换指定元素内容 Collections.replaceAll(lis, "asd", "55555"); System.out.println("替换后集合数据:"+lis);//替换后集合数据:[55555, bvc, adv, sasd, aaas] //将集合中的所有的元素进行替换 Collections.fill(lis, "0000"); System.out.println("替换后集合数据:"+lis);//替换后集合数据:[0000, 0000, 0000, 0000, 0000] } }
public class ListDemo { public static void main(String[] args) { List<String> lis = new ArrayList(); lis.add("asd"); lis.add("bvc"); lis.add("adv"); lis.add("sasd"); lis.add("aaas"); System.out.println("原集合数据:" + lis);// 原集合数据:[asd, bvc, adv, sasd, aaas] // 排序后 Collections.sort(lis); System.out.println(lis);// [aaas, adv, asd, bvc, sasd] // 反转操作后 Collections.reverse(lis); System.out.println(lis);// [sasd, bvc, asd, adv, aaas] } }
public static void main(String[] args) { List<String> lis = new ArrayList(); lis.add("asd"); lis.add("bvc"); lis.add("adv"); lis.add("sasd"); lis.add("aaas"); System.out.println("原集合数据:" + lis);// 原集合数据:[asd, bvc, adv, sasd, aaas] //使用指定的随机源对指定列表进行置换。所有置换发生的可能性都是相等的,假定随机源是公平的。 //每次运行的结果都不一样 Collections.shuffle(lis, new Random()); System.out.println("Random集合数据:" + lis);//Random集合数据:[adv, aaas, sasd, bvc, asd] } }
public static void main(String[] args) { List<String> lis = new ArrayList(); lis.add("asd"); lis.add("bvc"); lis.add("adv"); lis.add("sasd"); lis.add("aaas"); System.out.println("原集合数据:" + lis);// 原集合数据:[asd, bvc, adv, sasd, aaas] //在指定列表的指定位置处交换元素。 Collections.swap(lis, 0, 1); System.out.println("交换后的集合数据:" + lis);//交换后的集合数据:[bvc, asd, adv, sasd, aaas] <pre name="code" class="java">} }