- 前言
- 创建实例化测试对象
- 操作
- 升序
- 降序
- 取最大max
- 取最小值min
- list取反reverse
- list随机打乱shuffle
- 替换list的一个元素为另一个元素replaceAll
- 指定对象并返回一个List
- 指定对象并返回一个Set
- 互换list中指定2个位置的元素
- 其他
- list深度复制
前言
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
创建、实例化测试对象
创建一个用于测试的用户对象,对象实现Comparable接口,同时通过对象id进行操作,代码如下:
public class UserInfoBean implements Comparable<UserInfoBean>
{
private int id;
private String name;
private int age;
public UserInfoBean(int id, String name, int age)
{
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public int compareTo(UserInfoBean userInfoBean)
{
// TODO Auto-generated method stub
if (this.id < userInfoBean.id)
return -1;
else if (this.id > userInfoBean.id)
return 1;
else
return 0;
}
@Override
public String toString()
{
return "UserInfoBean [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
操作
实例化一个list,并往list里面添加三个用户对象
List<UserInfoBean> userInfos = new ArrayList<UserInfoBean>();
userInfos.add(new UserInfoBean(2, "张三", 10));
userInfos.add(new UserInfoBean(1, "李四", 25));
userInfos.add(new UserInfoBean(3, "王五", 40));
for (int i = 0; i < userInfos.size(); i++)
{
System.out.println(userInfos.get(i).toString());
}
打印日志如下:
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=3, name=王五, age=40]
因为UserInfoBean对象中实现的compareTo方法是围绕用户的id在进行操作,所以以下的操作将围绕id进行
升序
UserInfoBean中实现的compareTo如下
public int compareTo(UserInfoBean userInfoBean)
{
// TODO Auto-generated method stub
if (this.id < userInfoBean.id)
return -1;
else if (this.id > userInfoBean.id)
return 1;
else
return 0;
}
// 升序
System.out.println("升序:");
Collections.sort(userInfos);
for (int i = 0; i < userInfos.size(); i++)
{
System.out.println(userInfos.get(i).toString());
}
日志如下:
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=3, name=王五, age=40]
降序
reverseOrder() 方法用于获取一个比较有否就实现Comparable接口的对象的集合的自然顺序相反。
// 降序
Collections.sort(userInfos, Collections.reverseOrder());
for (int i = 0; i < userInfos.size(); i++)
{
System.out.println(userInfos.get(i).toString());
}
日志如下:
UserInfoBean [id=3, name=王五, age=40]
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=1, name=李四, age=25]
取最大(max)
在list中取id最大一个对象
UserInfoBean userInfo_max = Collections.max(userInfos);
System.out.println(userInfo_max);
日志如下:
UserInfoBean [id=3, name=王五, age=40]
取最小值(min)
在list中取id最大一个对象
UserInfoBean userInfo_min = Collections.min(userInfos);
System.out.println(userInfo_min);
日志如下:
UserInfoBean [id=1, name=李四, age=25]
list取反(reverse)
将一个list的子元素按原有的顺序取反
Collections.reverse(userInfos);
for (int i = 0; i < userInfos.size(); i++)
{
System.out.println(userInfos.get(i).toString());
}
原数据:
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=3, name=王五, age=40]
取反后数据:
UserInfoBean [id=3, name=王五, age=40]
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=2, name=张三, age=10]
list随机打乱(shuffle)
对一个list的元素进行随机打乱元素顺序
Collections.shuffle(userInfos);
for (int i = 0; i < userInfos.size(); i++)
{
System.out.println(userInfos.get(i).toString());
}
源数据
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=3, name=王五, age=40]
UserInfoBean [id=4, name=赵六, age=80]
第一次运行:
UserInfoBean [id=3, name=王五, age=40]
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=4, name=赵六, age=80]
UserInfoBean [id=1, name=李四, age=25]
第二次运行:
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=4, name=赵六, age=80]
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=3, name=王五, age=40]
第三次运行:
UserInfoBean [id=3, name=王五, age=40]
UserInfoBean [id=4, name=赵六, age=80]
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=2, name=张三, age=10]
替换list的一个元素为另一个元素(replaceAll)
replaceAll(数据源list,要替换的旧数据,新数据)
将list中指定的一个元素替换为另一个元素
UserInfoBean user = new UserInfoBean(5, "钱八", 80);
Collections.replaceAll(userInfos, userInfos.get(0), user);
for (int i = 0; i < userInfos.size(); i++)
{
System.out.println(userInfos.get(i).toString());
}
源数据:
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=3, name=王五, age=40]
UserInfoBean [id=4, name=赵六, age=80]
替换后的数据:
UserInfoBean [id=5, name=钱八, age=80]
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=3, name=王五, age=40]
UserInfoBean [id=4, name=赵六, age=80]
指定对象并返回一个List
List<UserInfoBean> userInfos2 = Collections.singletonList(new UserInfoBean(5, "钱八", 2));
for (int i = 0; i < userInfos2.size(); i++)
{
System.out.println(userInfos2.get(i).toString());
}
日志如下:
UserInfoBean [id=5, name=钱八, age=2]
指定对象并返回一个Set
Set<UserInfoBean> userSet = Collections.singleton(new UserInfoBean(5, "钱八", 2));
List<UserInfoBean> userInfos2 = new ArrayList<UserInfoBean>(userSet);
for (int i = 0; i < userInfos2.size(); i++)
{
System.out.println(userInfos2.get(0).toString());
}
日志如下:
UserInfoBean [id=5, name=钱八, age=2]
互换list中指定2个位置的元素
如下代码交换下标为0和2的2个元素
Collections.swap(userInfos, 0, 2);
for (int i = 0; i < userInfos.size(); i++)
{
System.out.println(userInfos.get(i).toString());
}
源数据:
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=3, name=王五, age=40]
UserInfoBean [id=4, name=赵六, age=80]
交换后数据
UserInfoBean [id=3, name=王五, age=40]
UserInfoBean [id=1, name=李四, age=25]
UserInfoBean [id=2, name=张三, age=10]
UserInfoBean [id=4, name=赵六, age=80]
其他
list深度复制
public static <T> List<T> deepCopy(List<T> src) {
try {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(src);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
@SuppressWarnings("unchecked")
List<T> dest = (List<T>) in.readObject();
return dest;
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}