使用TreeMap简单地HashMap的key进行排序,使用ArrayList对HashMap的value排序。
分别使用Comparator接口和Comparable接口实现key的排序。
package com.inspiration.examples.collection.sort;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;
public class SortExample {
public static void listSort() {
List<Student> stuList = new ArrayList<Student>();
Student s1 = new Student(1, "wang");
Student s2 = new Student(2, "li");
stuList.add(s1);
stuList.add(s2);
Collections.sort(stuList);
for (Student stu : stuList) {
System.out.println(stu);
}
// map sort which implements the Comparable Interface
public static void mapKeySetSort() {
Map<Student, Integer> hashMap = new HashMap<Student, Integer>();
for (int i = 0; i < 100; i++) {
Student stu = new Student(i, "wang" + i);
hashMap.put(stu, i);
}
/*
* System.out.println("the hashMap out put----"); Set<Student>
* set=hashMap.keySet(); for(Student stu:set){ System.out.println(stu);
* }
*/
System.out.println("the treeMap out put----");
TreeMap<Student, Integer> treeMap = new TreeMap<Student, Integer>(
hashMap);
Set<Student> set2 = treeMap.keySet();
for (Student stu : set2) {
System.out.println(stu);
}
// map sort which implements the Comparator Interface
public static void mapKeySetSort2() {
Map<Teacher, Integer> hashMap = new HashMap<Teacher, Integer>();
for (int i = 0; i < 100; i++) {
Teacher tea = new Teacher(i, "wang" + i);
hashMap.put(tea, i);
}
/*
* System.out.println("the hashMap out put----"); Set<Teacher>
* set=hashMap.keySet(); for(Teacher tea:set){ System.out.println(tea);
* }
*/
System.out.println("the treeMap out put----");
TreeMap<Teacher, Integer> treeMap = new TreeMap<Teacher, Integer>(
new TeacherComparator());
treeMap.putAll(hashMap);
Set<Teacher> set2 = treeMap.keySet();
for (Teacher tea : set2) {
System.out.println(tea);
}
public static void sortValues() {
Map<String, Integer> keyfreqs = new HashMap<String, Integer>();
keyfreqs.put("w", 1);
keyfreqs.put("b", 2);
ArrayList<Entry<String, Integer>> l = new ArrayList<Entry<String, Integer>>(
keyfreqs.entrySet());
Collections.sort(l, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return (o1.getValue() - o2.getValue());
}
});
for (Entry<String, Integer> e : l) {
System.out.println(e.getKey() + "::::" + e.getValue());
}
public static void main(String[] args) {
// listSort();
// System.exit(1);
// mapSort();
// mapKeySetSort2();
}
package com.inspiration.examples.collection.sort;
public class Student implements Comparable<Student>{
private int id;
private String name;
public Student(int id, String name) {
super();
this.id = id;
this.name = name;
}
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;
}
@Override
public int compareTo(Student o) {
// return o.id-this.id;
return this.id-o.id;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id != other.id)
return false;
return true;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
package com.inspiration.examples.collection.sort;
public class Teacher {
private int id;
private String name;
public Teacher(int id, String name) {
super();
this.id = id;
this.name = name;
}
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;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Teacher other = (Teacher) obj;
if (id != other.id)
return false;
return true;
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
package com.inspiration.examples.collection.sort;
import java.util.Comparator;
public class TeacherComparator implements Comparator<Teacher>{
@Override
public int compare(Teacher o1, Teacher o2) {
return o1.getId()-o2.getId();
}
TreeMap本身使用红黑树算法实现。