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));
|