Java之Collections工具类
collections
此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。
如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都将抛出NullPointerException。
collection .addAll方法
addAll(Collection<? super T> c, T... elements)将所有指定元素添加到指定 collection 中。
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)
使用二分搜索法搜索指定列表,以获得指定对象的索引
collection.copy方法
copy(List<? super T> dest, List<? 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,所以我们采用了另一个工具类Arrays.asList(new String[list1.size()])设置一个有容量的对象。
Collections.fill方法
fill(List<? super T> list, T obj)
使用指定元素替换指定列表中的所有元素(每个元素都替换为obj)。
Collections.max方法
max(Collection<? extends T> coll)
根据元素的自然顺序,返回给定 collection 的最大元素。
Collection.min方法
min(Collection<? extends T> coll)
根据元素的自然顺序 返回给定 collection 的最小元素。
Collections.replaceAll
replaceAll(List<T> list, T oldVal, T newVal)
使用另一个值替换列表中出现的所有某一指定值。
Collections.reverse方法
reverse(List<?> list)
反转指定列表中元素的顺序。
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<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());
}});
//这里的comparator重写compare方法,String类型进行比较,o1比o2为正序,o2比o1为反序。
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<?> list, int i, int j)
在指定列表的指定位置处交换元素。
支持同步方法
ArrayLIst,HashMap,HashSet都是线程不安全的,现在使用工具类的下面介绍的方法就可以返回一个同步的对象,简单的演示一下怎么转换吧。
synchronizedList(List<T> list)
返回指定列表支持的同步(线程安全的)列表。
synchronizedMap(Map<K,V> m)
返回由指定映射支持的同步(线程安全的)映射
synchronizedSet(Set<T> s)
返回指定 set 支持的同步(线程安全的)set。
//转成线程安全的list
List<String> list = Collections.synchronizedList(new ArrayList<>());
//转成线程安全的map
Map<String,String> map = Collections.synchronizedMap(new HashMap<>(10));
//转成线程安全的set
Set<String> set = Collections.synchronizedSet(new HashSet<>());
现在就可以当做可以线程安全的集合使用了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)