图一:
图二:
示例代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.junit.Test;
public class TestCollections {
/*
* 排序操作:(均为static方法)
* reverse(List):反转 List 中元素的顺序
* shuffle(List):对 List 集合元素进行随机排序
* sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
* sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
* swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
*/
@Test
public void test1() {
List list = new ArrayList();
list.add(52);
list.add(55);
list.add(50);
list.add(32);
list.add(11);
list.add(92);
System.out.println(list);
//反转排序
System.out.println("反转排序:");
Collections.reverse(list);
System.out.println(list);
//随机排序
System.out.println("随机排序:");
Collections.shuffle(list);
System.out.println(list);
System.out.println("随机排序:");
Collections.shuffle(list);
System.out.println(list);
//从小到大排序
System.out.println("从小到大排序:");
Collections.sort(list);
System.out.println(list);
//定制排序
System.out.println("定制排序:");
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Integer && o2 instanceof Integer) {
Integer i1 = (Integer) o1;
Integer i2 = (Integer) o2;
return -i1.compareTo(i2);//从大到小排序
}
return 0;
}
});
System.out.println(list);
//交换
Collections.swap(list, 0, 3);
System.out.println(list);
}
/*
* 查找、替换
*
* Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
* Object max(Collection,Comparator):根据 Comparator指定的顺序,返回给定集合中的最大元素
* Object min(Collection)
* Object min(Collection,Comparator)
* int frequency(Collection,Object):返回指定集合中指定元素的出现次数
* void copy(List dest,List src):将src中的内容复制到dest中
* boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值
*/
@Test
public void test2() {
List list = new ArrayList();
list.add(52);
list.add(55);
list.add(50);
list.add(32);
list.add(11);
list.add(92);
System.out.println(list);
//获取最大值(同获取最小值)
System.out.println("获取最大值:");
System.out.println(Collections.max(list));
List list2 = new ArrayList();
list2.add(new TestCollectionsObject("GG", 22));
list2.add(new TestCollectionsObject("MM", 21));
list2.add(new TestCollectionsObject("AA", 23));
list2.add(new TestCollectionsObject("HH", 26));
list2.add(new TestCollectionsObject("EE", 25));
for (Object o : list2) {
System.out.println(o);
}
//获取自定义的最大值
System.out.println("获取自定义的最大值:");
System.out.println(Collections.max(list2, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof TestCollectionsObject && o2 instanceof TestCollectionsObject) {
TestCollectionsObject t1 = (TestCollectionsObject) o1;
TestCollectionsObject t2 = (TestCollectionsObject) o2;
return t1.getAge().compareTo(t2.getAge());//按年龄从小到大排序,获取最大年龄的对象
}
return 0;
}
}));
//获取元素出现的频率
System.out.println("获取元素出现的频率:");
System.out.println(Collections.frequency(list, 50));
//实现List的复制
System.out.println("实现List的复制:");
//List newList = new ArrayList();//错误
//List newList = new ArrayList(list.size());//错误
List newList = Arrays.asList(new Object[list.size()]);//可以把一个数组作为参数,但不能把List类型作为参数
System.out.println(newList);
Collections.copy(newList, list);
System.out.println(newList);
//使用新值替换 List对象的所有旧值
System.out.println("使用新值替换 List对象的所有旧值:");
System.out.println("旧值:" + list);
Collections.replaceAll(list, 50, 10);
System.out.println("新值:" + list);
}
}
class TestCollectionsObject {
private String name;
private Integer age;
public TestCollectionsObject(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "TestCollectionsObject [name=" + name + ", age=" + age + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((age == null) ? 0 : age.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
TestCollectionsObject other = (TestCollectionsObject) obj;
if (age == null) {
if (other.age != null)
return false;
} else if (!age.equals(other.age))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}