1、int binarySearch(List<? esxtends Comparable<?supper T>>list,T key)
使用二叉树搜索算法返回指定对象的索引,前提是列表有序。
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(17);
list.add(34);
list.add(27);
list.add(15);
list.add(22);
Collections.sort(list);
System.out.println(list);//[15, 17, 22, 27, 34]
int i = Collections.binarySearch(list, 27);
System.out.println(i);//3
}
2、binarySrarch(List<? extends T>list,T key, Comparator<? supper T>c)
使用二叉树搜索算法对自定义对象的某种属性进行排序。
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("Anna",17));
list.add(new Student("Mike",25 ));
list.add(new Student("Bob",21));
list.add(new Student("Jane",15));
list.add(new Student("Ming",19));
Collections.sort(list, new Comparator<Student>() {//对列表按照年龄升序排序
@Override
public int compare(Student o1, Student o2) {
return o1.age-o2.age;
}
});
System.out.println(list);
//查找年龄为15的索引
int i = Collections.binarySearch(list,new Student("",15), new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.age-o2.age;
}
});
System.out.println(list);
System.out.println(i);//0
}
3、copy(List<? super T> dest,List <? extends T> src)
将列表中的元素复制到另一个列表中。
public static void main(String[] args) {
ArrayList list = new ArrayList();
ArrayList list1 = new ArrayList();
//给list1添加元素
list1.add(5);
list1.add("字符串类");
list1.add('a');
list1.add(true);
//给list添加元素
list.add(new Student("Anna",17));
list.add(new Student("Mike",25 ));
list.add(new Student("Bob",21));
list.add(new Student("Jane",15));
list.add(new Student("Ming",19));
list.add(new Student("joe",90));
Collections.copy(list,list1);//将list1中的元素添加到list集合中
System.out.println(list);//list中的部分元素被覆盖
System.out.println(list1);//list1保持不变
}
4、disjoint(Collectiong<?> c1,Collection<?> c2)
如果两个集合中没有共同的元素则返回true。
System.out.println(Collections.disjoint(list, list1));//true
5、public static Enumeration enumeration(Collection co);
本方法将集合上的枚举,返回一个Enumeration的实现类对象。使用Enumration中的方法来输出元素。方法:boolean hasMoreElements() 测试此枚举是否包含更多的元素。E nextElement()方法取出枚举中的下一个元素。
ArrayList list1 = new ArrayList();
//给list1添加元素
list1.add('a');
list1.add('b');
list1.add('c');
list1.add('d');
Enumeration ee = Collections.enumeration(list1);
while(ee.hasMoreElements())
System.out.println(ee.nextElement());//a,b,c,d
6、list (Enumeration<T> e) 返回一个数组列表,其中包含由枚举元素组成的一个ArrayList集合。参照上面的例子。
注这种写法会出现数组越界异常,因为nextElement()方法会将枚举集合中的枚举类型变量取出。最终成为一个空的枚举集合。正确的写法是,不要写nextElement。
Enumeration ee = Collections.enumeration(list1);
// while (ee.hasMoreElements())
// System.out.println(ee.nextElement());
ArrayList list2 = Collections.list(ee);
System.out.println(list2.get(3));
7、reverseOrder()返回一个比较器,它的效果与自然比较结果相反。
reverseOrder(Comparator<T> cmp)将比较器的结果反转。下面看例子。
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
list.add(67);list.add(74);list.add(34);
list.add(53);list.add(23);list.add(46);
list.add(93);list.add(55);list.add(17);
Comparator<Integer> oc = Collections.reverseOrder();
int f_s = oc.compare(list.get(5),list.get(7));//比较索引位置5,7的大小
System.out.println(f_s);//1 46<55 实现一个自然相反的排序结果
//创建一个比较学生年龄的比较器
Comparator<Student> cs = new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.age-o2.age;
}
};
Student s1 = new Student("aa", 15);
Student s2 = new Student("bb", 20);
System.out.println(cs.compare(s1,s2));//5
//用reverseOrder方法将构造器效果倒置
Comparator<Student> sc = Collections.reverseOrder(cs);
//检验倒置效果
System.out.println(sc.compare(s1, s2));//-5
}
8、rotate(List<?> list,int distance) 将集合中的元素旋转distance位
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
list.add(67);list.add(74);list.add(34);
list.add(53);list.add(23);list.add(46);
list.add(93);list.add(55);list.add(17);
System.out.println(list);//[67, 74, 34, 53, 23, 46, 93, 55, 17]
//将集合中的元素旋转1
Collections.rotate(list,1);//所有元素后移一位,最后一位移到前面
System.out.println(list);//[17, 67, 74, 34, 53, 23, 46, 93, 55]
//将后移1位的元素再移动8位
Collections.rotate(list,8);//共移动九位(list.size),恢复原样
System.out.println(list);//[67, 74, 34, 53, 23, 46, 93, 55, 17]
}
9、singleton(T o) 返回一个指定元素的不可变集。singletonList(T o)返回一个指定元素的不可变列表。singletonMap(K key, V value) 返回一个不可变的map集合。不可添加元素,否则会抛出异常:UnsupportedOperationException。
Set<String> singleton = Collections.singleton("单例");
System.out.println(singleton);
singleton.add("123");
System.out.println(singleton);//UnsupportedOperationException