总结:
Hash开头的存储结构哈希表 hashCode和equals
Tree开头的存储二叉树 排序 比较 Comparable Comparator
以TreeMap为例实现排序:
代码如下,以两种方式进行演示
演示一,实现Comparable接口
public class Student implements Comparable{
private String name;
private int age;
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 Student(int age, String name) {
super();
this.name = name;
this.age = age;
}
public Student() {
super();
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Student o) {
int n=Integer.compare(this.getAge(), o.getAge());
return n;
}
public static void main(String[] args) {
TreeMap<Student, String> treeMap=new TreeMap<>();
Student s1=new Student(10,"小白");
Student s2=new Student(11,"小黑");
Student s3=new Student(12,"小黄");
Student s4=new Student(13,"小亮");
treeMap.put(s1, "北京");
treeMap.put(s2, "上海");
treeMap.put(s3, "广州");
treeMap.put(s4, "深圳");
System.out.println(treeMap);
System.out.println("---entryset---");
Set<Entry<Student, String>> s=treeMap.entrySet();
for (Entry<Student, String> entry : s) {
System.out.println(entry);
}
}
结果如下:
{Student [name=小白, age=10]=北京, Student [name=小黑, age=11]=上海, Student [name=小黄, age=12]=广州, Student [name=小亮, age=13]=深圳}
—entryset—
Student [name=小白, age=10]=北京
Student [name=小黑, age=11]=上海
Student [name=小黄, age=12]=广州
Student [name=小亮, age=13]=深圳
演示二:使用比较器Comparator的compare方法
package com.qf.day16_2;
import java.util.Map.Entry;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;
/*
-
TreeMap
-
存储结构:二叉树
-
特点:存储键值对,键不能重复,值可以重复,一个键对应一个值,无序,会对key排序
*/
public class Demo5 {public static void main(String[] args) {
TreeMap<Student, String> treeMap=new TreeMap<>(new Comparator() {@Override public int compare(Student o1, Student o2) { int n=o1.getAge()-o2.getAge(); return n; } }); Student s1=new Student(10,"小白"); Student s2=new Student(11,"小黑"); Student s3=new Student(12,"小黄"); Student s4=new Student(13,"小亮"); treeMap.put(s1, "北京"); treeMap.put(s2, "上海"); treeMap.put(s3, "广州"); treeMap.put(s4, "深圳"); System.out.println(treeMap); System.out.println("---entryset---"); Set<Entry<Student, String>> s=treeMap.entrySet(); for (Entry<Student, String> entry : s) { System.out.println(entry); }
}
}
结果与上雷同。