hax*_*ode 4 java comparison map
我还是比较新的Java,我发现自己仍然试图正确编写这段代码,我认为应该更简单一些.
我有两个由同一个对象的两个不同实例组成的地图.键是对象,值是对象.
有两个实例,因为我试图确定一个实例中的键是否与另一个实例中的键不同.我正在尝试专门定位新密钥或丢失密钥,然后比较两个映射中存在的密钥的值.
下面的示例代码只是为了帮助可视化我正在尝试做的事情(希望它不会更令人困惑!)
以下示例的目标应该告诉我缺少键"C"并且有一个新键("D")然后它应该最终比较两个映射中键的值.
主要问题是,无论如何要在一个循环中执行此操作?主要是因为我的实际代码将触摸文件系统中的地图中的值,我正在尝试最小化它必须触摸磁盘的时间
Map<objA, objB> mapA = new HashMap<objA, objB>();
mapA.put("A", "1");
mapA.put("B", "2");
mapA.put("C", "3");
Map<objA, objB> mapB = new HashMap<objA, objB>();
mapB.put("A", "1");
mapB.put("D", "4");
// Check if something is missing from mapB
for(Map.Entry<objA, objB> entryMapA:mapA.entrySet())
{
if(!mapB.containsKey(entryMapA.getKey())
{
System.out.println(entryMapA.getKey() + " is missing");
}
}
// Check if something is new is in mapB
for(Map.Entry<objA, objB> entryMapB:mapB.entrySet())
{
if(!mapA.containsKey(entryMapB.getKey())
{
System.out.println(entryMapB.getKey() + " is new");
}
}
Run Code Online (Sandbox Code Playgroud)
fge*_*fge 10
a Map
中Set
的键是s,因此您可以使用集合和可用的操作.
例如:
Set<String> keysInA = new HashSet<String>(mapA.keySet());
Set<String> keysInB = new HashSet<String>(mapB.keySet());
// Keys in A and not in B
Set<String> inANotB = new HashSet<String>(keysInA);
inANotB.removeAll(keysInB);
// Keys common to both maps
Set<String> commonKeys = new HashSet<String>(keysInA);
commonKeys.retainAll(keysInB);
Run Code Online (Sandbox Code Playgroud)
等等
注意:您不能直接使用地图的密钥集.如果你这样做:
// This returns the actual key set of the map, NOT a copy!
Set<String> inANotB = mapA.keysSet();
inANotB.removeAll(mapB.keySet())
Run Code Online (Sandbox Code Playgroud)
你实际上删除了键(及其相关的值)mapA
.
最后,你应该注意到HashSet
没有订单保证.如果这对你很重要,你想看看SortedSet
(例如TreeSet
)的实现.
归档时间: |
|
查看次数: |
26426 次 |
最近记录: |