1. 首页
  2. Java基础

057-五十七、Java之Collections工具类

collections

此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。
如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都将抛出
NullPointerException

collection .addAll方法


addAll(Collection<? super T> c, T... elements) 将所有指定元素添加到指定 collection 中。 List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); /*addAll(Collection<? super T> c, T... elements) 将所有指定元素添加到指定 collection 中。*/ Collections.addAll(list,"5","6","7"); for (String str : list) { System.out.print(str + "\t"); } 结果:1 2 3 4 5 6 7

collection.binarySearch方法


binarySearch(List<? extends Comparable<? super T>> list, T key) 使用二分搜索法搜索指定列表,以获得指定对象 List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); int index = Collections.binarySearch(list,"2"); System.out.println("2的索引为:" + index); 结果:2的索引为:1

collection.copy方法

copy(List&lt;? super T> dest, List&lt;? extends T> src)
将所有元素从一个列表复制到另一个列表。


List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("4"); List<String> list2 = Arrays.asList(new String[list1.size()]); Collections.copy(list2,list1); for (String str : list2) { System.out.print(str + "\t"); }

解释下上面代码:由于Collections.copy方法的list2需要一个和list1一样的容量,否则会抛出异常的。一般直接实例化的ArrayList容量都是0,所以我们采用了另一个工具类1来来为1设置一个有容量的对象。

Collections.fill方法

fill(List&lt;? super T> list, T obj)
使用指定元素替换指定列表中的所有元素。


List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("4"); Collections.fill(list1,"将list集合中所有的元素都替换"); for (String str : list1) { System.out.println(str + "\t"); }

Collections.max方法

max(Collection&lt;? extends T> coll)
根据元素的自然顺序,返回给定 collection 的最大元素。


List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("4"); String max = Collections.max(list1); System.out.println("最大值为:"+max); 结果:最大值为:4

Collection.min方法

min(Collection&lt;? extends T> coll)
根据元素的自然顺序 返回给定 collection 的最小元素。


List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("4"); String min = Collections.min(list1); System.out.println("最小值为:"+min); 结果:最小值为:1

Collections.replaceAll

replaceAll(List&lt;T> list, T oldVal, T newVal)
使用另一个值替换列表中出现的所有某一指定值。


List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("4"); list1.add("3"); Collections.replaceAll(list1,"3","修改了"); for (String str : list1) { System.out.print(str + "\t"); } 结果:1 2 修改了 4 修改了

Collections.reverse方法

reverse(List&lt;?> list)
反转指定列表中元素的顺序。


List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("4"); Collections.reverse(list1);//将list1原有顺序反过来 for (String str : list1) { System.out.print(str + "\t"); } 结果:4 3 2 1

Collections.reverseOrder方法

reverseOrder()
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。
可以使用在集合的排序上。


List<String> list1 = new ArrayList<>(); list1.add("3"); list1.add("1"); list1.add("4"); list1.add("2"); //Collections.reverseOrder()是一个比较器,使用在list的排序上 list1.sort(Collections.reverseOrder()); for (String str : list1) { System.out.print(str + "\t"); } 结果:4 3 2 1

Collections.sort方法

sort(List&lt;T> list)
根据元素的自然顺序 对指定列表按升序进行排序。


List<String> list1 = new ArrayList<>(); list1.add("3"); list1.add("1"); list1.add("4"); list1.add("2"); //排序 Collections.sort(list1); for (String str : list1) { System.out.print(str + "\t"); } 结果:1 2 3 4

对其他类型泛型的List进行排序

首先定一个Student


class Student { private String name; private int id; public Student(String name, int id) { this.name = name; this.id = id; } public String getName() { return name; } public int getId() { return id; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", id=" + id + '}'; } }

排序代码


List<Student> list = new ArrayList<>(); list.add(new Student("张三5",5)); list.add(new Student("张三1",1)); list.add(new Student("张三4",4)); list.add(new Student("张三6",6)); list.add(new Student("张三3",3)); list.add(new Student("张三2",2)); // Collections.sort(list, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getName().compareTo(o2.getName()); } }); for (Student stu : list) { System.out.println(stu + "\t"); } //结果: Student{name='张三1', id=1} Student{name='张三2', id=2} Student{name='张三3', id=3} Student{name='张三4', id=4} Student{name='张三5', id=5} Student{name='张三6', id=6}

Collections.swap

swap(List&lt;?> list, int i, int j)
在指定列表的指定位置处交换元素。


List<String> list1 = new ArrayList<>(); list1.add("3"); list1.add("1"); list1.add("4"); list1.add("2"); System.out.println("互换前的数据:"); for (String str : list1) { System.out.print(str + "\t"); } //将第1个元素和第3个元素互换 Collections.swap(list1,0,2); System.out.println("互换后的数据:"); for (String str : list1) { System.out.print(str + "\t"); } 结果 互换前的数据: 1 4 2 互换后的数据: 1 3 2

支持同步方法

ArrayLIst,HashMap,HashSet都是线程不安全的,现在使用工具类的下面介绍的方法就可以返回一个同步的对象,简单的演示一下怎么转换吧。
synchronizedList(List&lt;T> list)
返回指定列表支持的同步(线程安全的)列表。
synchronizedMap(Map&lt;K,V> m)
返回由指定映射支持的同步(线程安全的)映射
synchronizedSet(Set&lt;T> s)
返回指定 set 支持的同步(线程安全的)set


//转成线程安全的list List<String> list = Collections.synchronizedList(new ArrayList<>()); //转成线程安全的map Map<String,String> map = Collections.synchronizedMap(new HashMap<>(10)); //转成线程安全的 Set<String> set = Collections.synchronizedSet(new HashSet<>()); 现在就可以当做可以线程安全的集合使用了。

Arrays

此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException
大致上的方法都类似,简单讲几个吧!!!

Array.copyOf方法

copyOf(T[] original, int newLength)
复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。


String[] strings = {"1","2","3","4"}; //拷贝数组 String[] newArray = Arrays.copyOf(strings,strings.length); for (String str : newArray) { System.out.print(str + "\t"); } 结果:1 2 3 4

Arrays.toString方法

toString(Object[] a)
返回指定数组内容的字符串表示形式。


String[] strings = {"1","2","3","4"}; System.out.print(Arrays.toString(strings) + "\t");

Arrays.sort

sort(T[] a, Comparator&lt;? super T> c)
根据指定比较器产生的顺序对指定对象数组进行排序。


String[] strings = {"5","2","1","6"}; //排序 Arrays.sort(strings, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); System.out.print(Arrays.toString(strings) + "\t"); 结果:[1, 2, 5, 6]

写完了如果写得有什么问题,希望读者能够给小编留言,也可以点击[此处扫下面二维码关注微信公众号](https://www.ycbbs.vip/?p=28 "此处扫下面二维码关注微信公众号")

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
  4. JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

    本文著作权归作者所有,如若转载,请注明出处

    转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

    标题:057-五十七、Java之Collections工具类

    链接:https://www.javajike.com/article/1364.html

« 058-五十八、Java之反射
056-五十六、Java之Properties及对象序列化»

相关推荐

QR code