java基础集合操作工具类Collections简述(java集合四)
2015-06-06 09:55
501 查看
对集合中的元素进行排序
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- 要搜索的键。 返回:如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 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) { // 得出中间值位置 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">} }
相关文章推荐
- 初试IDEA插件开发
- java.util.Random 类的 nextInt(int num )
- Java加密技术(三)对称加密算法PBE
- 关于Java.net.URL对象使用Proxy访问Internet资源
- springMVC框架建设进程
- Java文件操作-随机访问文件和zip文档
- 今天开始写博客
- JavaI/O 系统
- 深入理解Java多态性
- Java图形用户界面编程
- Java加密技术(二)对称加密算法DES&AES
- Java加密算法 RSA
- Java加密算法 AES
- Java知多少(84)图形界面之布局设计
- Java's Volatile Keyword
- spring.net的基本搭建
- 【eclipse】快捷键整理
- JAVA文件操作
- JAVA的三大特征 封装继承多态- 简单总结
- Java中的中间缓存变量机制