Java集合框架5——集合工具类的使用

来源:互联网 发布:只读文件数据怎么修改 编辑:程序博客网 时间:2024/06/03 08:31

Demo1:常用方法

//自定义比较器,按长度排序,短的在前面class StrLenComparator implements Comparator<String> {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);}}public class CollectionsDemo {public static void main(String[] args) {sortDemo();//sort排序binarySearchDemo();//binarySearch二分查找fillAndReplaceAllDemo();//fill全部替换,replaceAll,替换某个元素shuffleDemo();//shuffle打乱排序reverseOrderDemo();//reverseOrder按原来的顺序倒序排序}public static void sortDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");//原来的顺序System.out.println(list);//[abcd, aaa, zz, kkkkk, qq, z]//自然顺序排序Collections.sort(list);System.out.println(list);//[aaa, abcd, kkkkk, qq, z, zz]//根据自定义的比较器排序,按长度排序Collections.sort(list, new StrLenComparator());System.out.println(list);//[z, qq, zz, aaa, abcd, kkkkk]}public static void binarySearchDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");Collections.sort(list);System.out.println(list);//[aaa, abcd, kkkkk, qq, z, zz]//binarySearch如果有返回该对象的索引int index = Collections.binarySearch(list, "abcd");System.out.println(index);//1//binarySearch如果找不到,返回要查找对象在原集合中插入位置的索引的负数再减1//aaac在原集合中应该在1位置插入,返回-1再减1,也就是-2int index2 = Collections.binarySearch(list, "aaac");System.out.println(index2);//-2//binarySearch也可以按我们自定义顺序排好后再查找Collections.sort(list, new StrLenComparator());System.out.println(list);//[z, qq, zz, aaa, abcd, kkkkk]int index3 = Collections.binarySearch(list, "abcd",new StrLenComparator());System.out.println(index3); //4}public static void fillAndReplaceAllDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("aaa");list.add("kkkkk");list.add("qq");list.add("z");//replaceAll,将指定元素替换System.out.println(list);//[abcd, aaa, zz, aaa, kkkkk, qq, z]Collections.replaceAll(list, "aaa", "pp");System.out.println(list);//[abcd, pp, zz, pp, kkkkk, qq, z]//fill,整个集合都替换Collections.fill(list, "xx");System.out.println(list);//[xx, xx, xx, xx, xx, xx, xx]}public static void shuffleDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");//shuffle将集合顺序打乱,随机排列,每次运行结果会不一样System.out.println(list);//[abcd, aaa, zz, kkkkk, qq, z]Collections.shuffle(list);System.out.println(list);//[kkkkk, qq, aaa, zz, z, abcd]}public static void reverseOrderDemo() {TreeSet<String> ts = new TreeSet<String>();ts.add("abcde");ts.add("aaa");ts.add("k");ts.add("cc");Iterator it = ts.iterator();while(it.hasNext()) {System.out.println(it.next());}/*原来按自然顺序排列aaaabcdecck */TreeSet<String> ts2 = new TreeSet<String>(Collections.reverseOrder());ts2.add("abcde");ts2.add("aaa");ts2.add("k");ts2.add("cc");Iterator it2 = ts2.iterator();while(it2.hasNext()) {System.out.println(it2.next());}/*Collections.reverseOrder()按自然顺序倒着排列kccabcdeaaa */TreeSet<String> ts3 = new TreeSet<String>(Collections.reverseOrder(new StrLenComparator()));ts3.add("abcde");ts3.add("aaa");ts3.add("k");ts3.add("cc");Iterator it3 = ts3.iterator();while(it3.hasNext()) {System.out.println(it3.next());}/*Collections.reverseOrder(new StrLenComparator()) * 按自定义比较器倒序排(原来是从短到长)abcdeaaacck */}}


Demo2:数组转换成集合

public class ArrayToList {public static void main(String[] args) {String[] arr = {"abc", "cc", "kkkk"};List<String> list = Arrays.asList(arr);System.out.println(list);//[abc, cc, kkkk]  /* * 把数组变成list集合有什么好处? * 可以使用集合的思想和方法来操作数组中的元素。 * 比如要查找数组中是否存在某个元素,就可以用集合的方法 */System.out.println("contains:" + list.contains("cc"));//contains:true/* * 注意:将数组变成集合,不可以使用集合的增删方法。 * 否则会抛出UnsupportedOperationException异常 *///list.add("qq");//抛出异常/* * 如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。 * 如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。 */int[] nums = {2, 4, 5};List<int[]> li = Arrays.asList(nums);System.out.println(li);//[[I@2f0f94a0]Integer[] nums2 = {2,4,5};List<Integer> li2 = Arrays.asList(nums2);System.out.println(li2);//[2, 4, 5]}}

Demo3:集合转换成数组

public class CollectionToArray {public static void main(String[] args) {ArrayList<String> al = new ArrayList<String>();al.add("abc1");al.add("abc2");al.add("abc3");/*1,指定类型的数组到底要定义多长呢?当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。所以创建一个刚刚好的数组最优。2,为什么要将集合变数组?为了限定对元素的操作。不需要进行增删了。*/String[] arr = al.toArray(new String[0]);System.out.println(Arrays.toString(arr));//[abc1, abc2, abc3]String[] arr1 = al.toArray(new String[al.size()]);System.out.println(Arrays.toString(arr1));//[abc1, abc2, abc3]String[] arr2 = al.toArray(new String[5]);System.out.println(Arrays.toString(arr2));//[abc1, abc2, abc3, null, null]}}



0 0
原创粉丝点击