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<>());

现在就可以当做可以线程安全的集合使用了。

猜你喜欢

转载自www.cnblogs.com/canzhen/p/java_Collections.html