Fai*_*sra 18 java collections guava
我看到很多关于multimap的例子,但不明白为什么Google Gauva与众不同?
Multimap<Integer, Set<String>> option4 = HashMultimap.create(); // Gauva
Map<Integer, Set<String>> opt = new HashMap<Integer, Set<String>>(); //Core Java
Run Code Online (Sandbox Code Playgroud)
以上两者对于保存数据的行为是否相同或不同?
Ric*_*ich 15
不同之处在于,对于第二个Core Java实现,您需要在插入之前检查Set是否存在.Guava的Multimap为您解决了这个问题.
使用Core Java:
Set<String> innerSet = opt.get(key);
if (innerSet == null) {
innerSet = new HashSet<String>();
opt.put(key, innerSet);
}
innerSet.add(value);
Run Code Online (Sandbox Code Playgroud)
与番石榴:
opt.put(key, value);
Run Code Online (Sandbox Code Playgroud)
Guava负责初始化一个否则不存在的Set来存储值,处理任何线程问题(例如,阻止两个线程并行创建一个新的Set用于同一个键)并且还提供了一些你需要的有用方法手动实现,例如获取所有Sets的所有值.
你误会了 这些甚至不是大致等效的:
Multimap<Integer, Set<String>> option4 = HashMultimap.create(); // Guava
Map<Integer, Set<String>> opt = new HashMap<Integer, Set<String>>(); //Core Java
Run Code Online (Sandbox Code Playgroud)
在您的示例中,opt4将单个映射Integer到字符串集集合。正是使用a的意义Multimap,您不必显式处理第二维。因此,实际上,正确的(等效的)声明将是:
SetMultimap<Integer, String> multimap = HashMultimap.create(); // Guava
Run Code Online (Sandbox Code Playgroud)
这样您就可以得到这样的地图视图:
Map<Integer, Set<String>> mapView = multimap.asMap();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24005 次 |
| 最近记录: |