Collections工具类介绍:
(1)Collections是一个操作Set、List和Map等集合的工具类
(2)Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作
排序操作:(均为static方法)
(1)reverse(List):反转List中元素的顺序
(2)shuffle(List):对List集合元素进行随机排序
(3)sort(List):根据元素的自然顺序对指定List集合按升序排序
(4)sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
(5)swap(List,int,int):将指定list集合中的i处元素和j处元素进行交换
我们设计代码如下所示:
package com.rgf.collections_;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@SuppressWarnings({"all"})
public class Collections_ {
public static void main(String[] args) {
//创建AraayList集合,进行测试
List list = new ArrayList();
list.add("tom");
list.add("smith");
list.add("king");
list.add("milan");
System.out.println("list="+list);
//(1)reverse(List):反转List中元素的顺序
Collections.reverse(list);
System.out.println("list="+list);
//(2)shuffle(List):对List集合元素进行随机排序
for (int i = 0; i < 3; i++) {
Collections.reverse(list);
System.out.println("list="+list);
}
//(3)sort(List):根据元素的自然顺序对指定List集合按升序排序
Collections.sort(list);
System.out.println("自然排序后");
System.out.println("list="+list);
//(4)sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
//我们希望按照字符串的长度大小进行排序
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
//可以加入校验代码
return ((String)o1).length()-((String)o2).length();
}
});
System.out.println("字符串长度大小排序="+list);
//(5)swap(List,int,int):将指定list集合中的i处元素和j处元素进行交换
Collections.swap(list,0,1);
System.out.println("交换后的情况");
System.out.println("list="+list);
}
}
运行界面如下所示:
查找、替换:
(1)Object max(Collection):根据元素的自然排序,返回给定集合中的最大元素
(2)Object max(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最小元素
(3)Object min(Collection):根据元素的自然排序,返回给定集合中的最小元素
(4)Object min(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最小元素
(5)int frequency(Collection,Object):返回指定集合中指定元素的出现次数
(6)void copy(List dest,List src):将src中的内容复制到dest中
(7) boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值
我们在替换过程中,我们呢发现抛出如下异常:
我们进入copy的源码进行查看:
public static <T> void copy(List<? super T> dest, List<? extends T> src) {
int srcSize = src.size();//原来集合的大小
if (srcSize > dest.size()) //原来数组的大小大于现在集合的大小,直接抛出异常。
throw new IndexOutOfBoundsException("Source does not fit in dest");
if (srcSize < COPY_THRESHOLD ||
(src instanceof RandomAccess && dest instanceof RandomAccess)) {
for (int i=0; i<srcSize; i++)
dest.set(i, src.get(i));
} else {
//上述不成立就进入迭代器
ListIterator<? super T> di=dest.listIterator();
ListIterator<? extends T> si=src.listIterator();
for (int i=0; i<srcSize; i++) {
di.next();
di.set(si.next());
}
}
}
我们设计的代码如下所示:
package com.rgf.collections_;
import java.util.*;
@SuppressWarnings({"all"})
public class Collections_ {
public static void main(String[] args) {
//创建AraayList集合,进行测试
List list = new ArrayList();
list.add("tom");
list.add("smith");
list.add("king");
list.add("milan");
System.out.println("list="+list);
//(1)Object max(Collection):根据元素的自然排序,返回给定集合中的最大元素
Collections.max(list);
System.out.println("自然顺序最大元素="+Collections.max(list));
//(2)Object max(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最小元素
//返回字符串长度最大的元素
Object maxobject=Collections.max(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((String)o1).length()-((String)o2).length();
}
});
System.out.println("长度最大的元素="+maxobject);
//(3)Object min(Collection):根据元素的自然排序,返回给定集合中的最小元素
Collections.min(list);
System.out.println("自然顺序最小元素="+ Collections.min(list));
//(4)Object min(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最小元素
Object minobject=Collections.min(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((String)o1).length()-((String)o2).length();
}
});
System.out.println("长度最小的元素="+minobject);
//(5)int frequency(Collection,Object):返回指定集合中指定元素的出现次数
list.add("tom");
int tom = Collections.frequency(list, "tom");
System.out.println("tom出现的次数="+tom);
//(6)void copy(List dest,List src):将src中的内容复制到dest中
//为了完成一个完整拷贝,我们需要先给dest赋值,大小和list.size()一样
List List1 = new ArrayList();
for (int i=0;i<list.size();i++){
List1.add("");
}
Collections.copy(List1,list);
System.out.println("List="+list);
//(7) boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值
//如果List中,有tom,就替换成 汤姆
Collections.replaceAll(list,"tom","汤姆");
System.out.println("list替换后="+list);
}
}
运行界面如下所示: