概述
Collections工具类
- 拷贝(浅拷贝)
copy
- List的addAll也是浅拷贝
- 如何实现深拷贝呢? → 序列化
- 倒置
reverse
- 排序 + List自身排序API
sort
- 交换
swap
- 乱序
shuffle
- 二分查找
binarySearch
一:测试用例
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* 测试Collections工具类操作List
*/
public class CollectionsTest {
public static void main(String[] args) {
// test1();
// test2();
// test3();
List<Person> list1 = new ArrayList<>();
list1.add(new Person("小明",12,"男"));
list1.add(new Person("小绿",17,"女"));
List<Person> list2 = null;
try {
list2 = deepCopy(list1);
} catch (IOException|ClassNotFoundException e) {
e.printStackTrace();
}
list1.get(0).setGender("女");
System.out.println(list1);
System.out.println(list2);
}
private static void test1() {
List<String> list1 = new ArrayList<>();
list1.add("AAA");
list1.add("DDD");
list1.add("YYY");
list1.add("CCC");
list1.add("RRR");
System.out.println(list1);
/* 使用Collections测试 */
// 集合拷贝
// 注意:
// 1. copy比较的是size而不是capacity
// 2. 浅拷贝 -> test2证明
List<String> list2 = new ArrayList<>();
Collections.addAll(list2,new String[list1.size()]);
Collections.copy(list2,list1);
System.out.println(list2);
// 集合倒置
Collections.reverse(list1);
System.out.println(list1);
// 集合排序
Collections.sort(list1);
System.out.println(list1);
Collections.sort(list1, Comparator.reverseOrder());
list1.sort(Comparator.reverseOrder());
System.out.println(list1);
// 集合元素交换
Collections.swap(list1,0,list1.size()-1);
System.out.println(list1);
// 集合乱序
Collections.shuffle(list1);
System.out.println(list1);
// 集合二分查找
Collections.sort(list1);
System.out.println(Collections.binarySearch(list1, "RRR"));
}
/**
* Collections.copy浅拷贝证明
*/
private static void test2(){
List<Person> list1 = new ArrayList<>();
list1.add(new Person("小明",12,"男"));
list1.add(new Person("小绿",17,"女"));
List<Person> list2 = new ArrayList<>();
Collections.addAll(list2,new Person[list1.size()]);
Collections.copy(list2,list1);
System.out.println(list1);
System.out.println(list2);
list1.get(0).setGender("女");
System.out.println(list1);
System.out.println(list2);
}
/**
* List的addAll方法也是浅拷贝!
*/
private static void test3(){
List<Person> list1 = new ArrayList<>();
list1.add(new Person("小明",12,"男"));
list1.add(new Person("小绿",17,"女"));
List<Person> list2 = new ArrayList<>();
list2.addAll(list1);
System.out.println(list1);
System.out.println(list2);
list1.get(0).setGender("女");
System.out.println(list1);
System.out.println(list2);
}
private static <T> List<T> deepCopy(List<T> list) throws IOException, ClassNotFoundException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(list);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
List<T> o = (List<T>) ois.readObject();
return o;
}
}
二:List自身sort方法
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
* 测试List的sort方法
*/
public class ListSortTest {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(56);
list.add(45);
list.add(89);
list.add(17);
list.sort((a,b)->a-b);
System.out.println(list);
list.sort(Comparator.reverseOrder());
System.out.println(list);
list.sort(Integer::compareTo);
System.out.println(list);
list.sort((a,b)->-1);
System.out.println(list);
}
}
最后
以上就是高挑自行车为你收集整理的Java - 【集合框架二:List】Collections的全部内容,希望文章能够帮你解决Java - 【集合框架二:List】Collections所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复