Collections类常用方法
一、此类完全由在 collection 上进行操作或返回 collection 的静态方法组成
二、static <T> void sort(List<T> list, Comparator<? super T> c)
实例:
import java.util.*;
/*
Collections.sort()排序实例
二分法查找
*/
class CollectionsTest1 {
public static void main(String[] args) {
binarySearchTest();
}
//二分法常找
public static void binarySearchTest() {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("c++");
list.add("aaa");
list.add("c");
list.add("ef");
list.add("aa");
Collections.sort(list, new StrLenComparator());
out(list);
// int index = Collections.binarySearch(list, "b");
// out(index);
int index = selfBinarySearch(list, "bbb", new StrLenComparator());
out(index);
}
//自定义二分法
public static int selfBinarySearch(ArrayList<String> arr, String key, Comparator<String> comp) {
int max = arr.size() - 1;
int min = 0;
int mid = (max + min) >> 1;
while(min <= max) {
String str = arr.get(mid);
int num = comp.compare(str, key);
if (num > 0) {
max = mid - 1;
} else if (num < 0) {
min = mid + 1;
} else {
return mid;
}
mid = (max + min) >> 1;
}
return -mid - 1;
}
//字符串最大值
public static void strTest() {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("c++");
list.add("aaa");
list.add("c");
list.add("ef");
list.add("aa");
out(list);
out("max=" + Collections.max(list));
}
//字符串长度排序
public static void strLenTest() {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("c++");
list.add("aaa");
list.add("c");
list.add("ef");
list.add("aa");
out(list);
Collections.sort(list, new StrLenComparator());
out(list);
}
//输出
public static void out(Object obj) {
System.out.println(obj);
}
}
//字符串长度排序比较器
class StrLenComparator implements Comparator<String> {
public int compare(String s1, String s2) {
int num = s1.length() - s2.length();
if (num == 0) {
return s1.compareTo(s2);
}
return num;
}
}
三、full方法:将集合中的所有元素替换成制定元素
import java.util.*;
/*
fill方法测试
练习:将集合中一部分元素替换成制定元素
*/
//mina
class FillTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("c++");
list.add("aaa");
list.add("c");
list.add("ef");
list.add("aa");
out(list);
selfFill(list, "ccc", 1, 4);
out(list);
}
//将集合中一部分元素替换成制定元素
public static void selfFill(ArrayList<String> list, String key, int start, int end) {
for (int i=start;i<end;i++) {
list.set(i, key);
}
}
//full方法测试
public static void fillTest() {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("c++");
list.add("aaa");
list.add("c");
list.add("ef");
list.add("aa");
out(list);
Collections.fill(list, "Java");
out(list);
}
//输出
public static void out(Object obj) {
System.out.println(obj);
}
}
四、TreeSet元素反序
import java.util.*;
/*
static <T> Comparator<T> reverseOrder()
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。
static <T> Comparator<T> reverseOrder(Comparator<T> cmp)
返回一个比较器,它强行逆转指定比较器的顺序。
测试:
*/
//mian
class ReverseTest
{
public static void main(String[] args) {
reverseElement();
}
//元素反转
public static void reverseElement() {
//将StrLenComparator()比较器构造器反转
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new StrLenComparator()));
ts.add("Java");
ts.add("c++");
ts.add("aaaff");
ts.add("c");
ts.add("ef");
ts.add("aa");
out(ts);
}
//输出
public static void out(Object obj) {
System.out.println(obj);
}
}
//字符串长度排序比较器
class StrLenComparator implements Comparator<String> {
public int compare(String s1, String s2) {
int num = s1.length() - s2.length();
if (num == 0) {
return s1.compareTo(s2);
}
return num;
}
}