java基础集合操作工具类Collections简述(java集合四)

来源:互联网 发布:网络星光大道张卫 编辑:程序博客网 时间:2024/05/29 05:55


对集合中的元素进行排序

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> {@Overridepublic 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);// sasdList<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 - 要搜索的键。
返回:
如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都小于指定的键,则为list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
抛出:
ClassCastException - 如果列表中包含不可相互比较 的元素(例如,字符串和整数),或者搜索键无法与列表的元素进行相互比较。

使用自定义二分法查找

// 定义一个二分法查找方法public static int dichotomyLookUpIndex(List<String> list, String key) {int min = 0;// 记录最小值角标,默认为集合的开始位置int mid; // 记录中间值位置int max = list.size();;// 记录最大值位置while (min <= max) {// 得出中间值位置 keymid = (min + max) / 2;// 根据key来获取集合中对应的值String str = list.get(mid);// 进行比较int num = str.compareTo(key);// 按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。// 按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。// 如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。// 如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0if (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">}}






0 0