TreeMultimap(guava) 使用:

原理解析:

(37条消息) Guava TreeMultiSet实现原理分析_云中漫步87的博客-CSDN博客_guava 树形结构

于HashMap中键值是不排序的,所以如果你需要排序的Multimap的话就需要使用guava中的TreeMultimap。

类:com.google.common.collect.TreeMultimap

1
2
3
4
5
6
7
8
9
10
11
TreeMultimap<Integer,Integer> map = TreeMultimap.create();

map.put(2, 4);
map.put(1, 2);
map.put(1, 3);
map.put(2, 6);
map.put(2, 4);
map.put(3, 6);
map.put(11, 2);
map.put(21, 6);
map.put(6, 7);

修改值

1
2
3
map.remove(3, 6);
map.put(12, 3);

遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Iterator iter = map.entries().iterator();
while(iter.hasNext())
{
Map.Entry<Integer, Integer> entry = (Map.Entry<Integer, Integer>)iter.next();
System.out.println(String.format("%d:%d", entry.getKey(),entry.getValue()));
}

结果:
1:2
1:3
2:4
2:6
6:7
11:2
12:3
21:6

用时(Mills)9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Set<Integer> keys = map.keySet();
for(int key:keys)
{
String result = String.format("%d:", key);
Set<Integer> values = map.get(key);
for(int value:values)
{
result = result+" "+value;
}
System.out.println(result);
}

结果:
1: 2 3
2: 4 6
6: 7
11: 2
12: 3
21: 6

用时(Mills):8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
public class Investor implements Comparator<Investor>{
private String name;
private String id;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "Investor{" +
"id=" + getId() +
", name='" + name
'}';
}
@Override
public int hashCode(){
final int prime=31;
int result = 1;
result = prime * result + ((this.getId() == null) ? 0 : this.getId().hashCode());
return result;
}

@Override
public int compare(Investor first, Investor second) {
if (first == second) {
return 0;
} else if (first == null) {
return -1;
} else if (second == null) {
return 1;
} else if (first.getId() != second.getId()) {
return (int)(first.getId() - second.getId());
} else {
return first.getId().compareTo(second.getId());
}
}

@Override
public boolean equals(Object obj){
if(this==obj)
return true;
if(obj==null)
return false;
if(getClass()!=obj.getClass())
return false;
Investor other=(Investor)obj;
if(this.getId()==null){
if(other.getId()!=null){
return false;
}else if(!this.getId().equals(other.getId())){
return false;
}
}
return true;
}
}

1
2
3
**通过Ordering.from指定排序方式**
TreeMultimap investor = TreeMultimap.create(Ordering.natural(),
Ordering.from(investorComparator));