類Collections是一個包裝類。它包含有各種有關集合操作的靜態多態方法。此類不能實例化,就像一個工具類,服務於Java的Collection框架。
Comparator 和 Comparable 比較
Comparable是排序接口;若一個類實現了Comparable接口,就意味着“該類支持排序”。
而Comparator是比較器;我們若需要控制某個類的次序,可以建立一個“該類的比較器”來進行排序。
我們不難發現:Comparable相當於“內部比較器”,而Comparator相當於“外部比較器”。
用代碼示例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
/**
* 將要完成:
* 1.通過Collections.sort()方法,對Integer泛型的List進行排序;
* 2.對String泛型的List進行排序;
* 3.對其他類型泛型的List進行排序,以Student爲例。
*/
public class CollectionsTest {
/**
* 1.通過Collections.sort()方法,對Integer泛型的List進行排序;
* 創建一個Integer泛型的List,插入十個100以內的不重複隨機整數,
* 調用Collections.sort()方法對其進行排序
*/
public void testSort1() {
List<Integer> integerList = new ArrayList<Integer>();
// 插入十個100以內的不重複隨機整數
Random random = new Random();
Integer k;
for (int i = 0; i < 10; i++) {
do {
k = random.nextInt(100);
} while (integerList.contains(k));
integerList.add(k);
System.out.println("成功添加整數:" + k);
}
System.out.println("-------------排序前--------------");
for (Integer integer : integerList) {
System.out.println("元素:" + integer);
}
Collections.sort(integerList);
System.out.println("----------------排序後-------------------");
for (Integer integer : integerList) {
System.out.println("元素:" + integer);
}
}
/**
* 2.對String泛型的List進行排序;
* 創建String泛型的List,添加三個亂序的String元素,
* 調用sort方法,再次輸出排序後的順序
*/
public void testSort2() {
List<String> stringList = new ArrayList<String>();
stringList.add("microsoft");
stringList.add("google");
stringList.add("lenovo");
System.out.println("------------排序前-------------");
for (String string : stringList) {
System.out.println("元素:" + string);
}
Collections.sort(stringList);
System.out.println("--------------排序後---------------");
for (String string : stringList) {
System.out.println("元素:" + string);
}
}
/**
* 3.對其他類型泛型的List進行排序,以Student爲例。
*/
public void testSort3() {
List<Student> studentList = new ArrayList<Student>();
Random random = new Random();
studentList.add(new Student(random.nextInt(1000) + "", "Mike"));
studentList.add(new Student(random.nextInt(1000) + "", "Angela"));
studentList.add(new Student(random.nextInt(1000) + "", "Lucy"));
studentList.add(new Student(10000 + "", "Beyonce"));
System.out.println("--------------排序前---------------");
for (Student student : studentList) {
System.out.println("學生:" + student.id + ":" + student.name);
}
Collections.sort(studentList);
System.out.println("----------------排序後------------------");
for (Student student : studentList) {
System.out.println("學生:" + student.id + ":" + student.name);
}
Collections.sort(studentList, new StudentComparator());
System.out.println("----------------按照姓名排序後-----------------");
for (Student student : studentList) {
System.out.println("學生:" + student.id + ":" + student.name);
}
}
/**
* @param args
*/
public static void main(String[] args) {
CollectionsTest ct = new CollectionsTest();
ct.testSort1();
ct.testSort2();
ct.testSort3();
}
}
import java.util.HashSet;
import java.util.Set;
/**
* 學生類
* @author Administrator
*
*/
public class Student implements Comparable<Student> {
public String id;
public String name;
public Set<Course> courses;
public Student(String id, String name) {
this.id = id;
this.name = name;
this.courses = new HashSet<Course>();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
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 (!(obj instanceof Student))
return false;
Student other = (Student) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
//@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
return this.id.compareTo(o.id);
}
}
import java.util.Comparator;
public class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.name.compareTo(o2.name);
}
}
通過以上示例,就能明白Collections的用法,和Comparator的用法.