练习:
原文:http://www.sxt.cn
一、TreeMap:有序,Comparable接口实现,自定义排序方式.
注:compareTo方法中,-1代表小于,0代表等于,1代表大于。如果是0 。则TreeMap在put时,认为key重复,发生替换value。
package com.sxt.treemap;
import java.util.Map;
import java.util.TreeMap;
public class MyTreeMap {
public static void main(String[] args) {
Map<Integer, String> mymap = new TreeMap<>();
mymap.put(10, "10aaa");
mymap.put(1, "1aaa");
mymap.put(11, "11aaa");
mymap.put(-1, "-1aaa");
mymap.put(-1, "-");
for (Integer key : mymap.keySet()) {
System.out.println(mymap.get(key));
}
Map<Entry, String> mymap2 = new TreeMap<>();
mymap2.put(new Entry(10,1000,"zhangsan"), "张三");
mymap2.put(new Entry(2,999,"lisi"), "李四");
mymap2.put(new Entry(3,999,"wangwu"), "王五");
mymap2.put(new Entry(5,100,"zhaoliu"), "赵六");
mymap2.put(new Entry(5,100,"xiaoqi"), "小七");
for (Entry key : mymap2.keySet()) {
System.out.println(mymap2.get(key));
}
}
}
class Entry implements Comparable<Entry>{
private int id;
private int salay;
private String name;
public Entry(int id, int salay, String name) {
super();
this.id = id;
this.salay = salay;
this.name = name;
}
@Override
public int compareTo(Entry o) {
if(salay < o.salay) {
return -1;
}else if(salay > o.salay) {
return 1;
}else {
if(id < o.id) {
return -1;
}else if(id > o.id) {
return 1;
}else {
return 0;
}
}
}
@Override
public String toString() {
return "Entry [id=" + id + ", salay=" + salay + ", name=" + name + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + salay;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Entry other = (Entry) obj;
if (id != other.id)
return false;
if (salay != other.salay)
return false;
return true;
}
}
二、TreeSet:底层是采用TreeMap的key存储TreeSet要存储的对象。
package com.sxt.treeset;
import java.util.Set;
import java.util.TreeSet;
public class MyTreeSet {
public static void main(String[] args) {
Set<Integer> myset = new TreeSet<>();
myset.add(1);
myset.add(9);
myset.add(7);
myset.add(100);
for (Integer entry : myset) {
System.out.println(entry);
}
Set<Entry> myset2 = new TreeSet<>();
myset2.add(new Entry(10,1000,"zhangsan"));
myset2.add(new Entry(2,999,"lisi"));
myset2.add(new Entry(3,999,"wangwu"));
myset2.add(new Entry(5,100,"zhaoliu"));
myset2.add(new Entry(5,100,"xiaoqi"));
for (Entry entry : myset2) {
System.out.println(entry);
}
}
}
class Entry implements Comparable<Entry>{
private int id;
private int salay;
private String name;
public Entry(int id, int salay, String name) {
super();
this.id = id;
this.salay = salay;
this.name = name;
}
@Override
public int compareTo(Entry o) {
if(salay < o.salay) {
return -1;
}else if(salay > o.salay) {
return 1;
}else {
if(id < o.id) {
return -1;
}else if(id > o.id) {
return 1;
}else {
return 0;
}
}
}
@Override
public String toString() {
return "Entry [id=" + id + ", salay=" + salay + ", name=" + name + "]";
}
}