Java哈希映射移位值
我有下面这样的散列映射。当上限值为空时,我想将值上移Java哈希映射移位值,java,hashmap,Java,Hashmap,我有下面这样的散列映射。当上限值为空时,我想将值上移 HashMap Key1 Val1 Key2 Key3 Key4 Val4 Key5 Key6 Val6 变成这样 HashMap Key1 Val1 Key2 Val4 Key3 Val6 Key4 Key5 Key6 然后像这样删除空值键 HashMap Key1 Val1 Key2 Val4 Key3 Val6 使用HashMap无法有意义地实现这一点,因为它没有定义的顺序,因此没有“第二个键”Key2——可以将
HashMap
Key1 Val1
Key2
Key3
Key4 Val4
Key5
Key6 Val6
变成这样
HashMap
Key1 Val1
Key2 Val4
Key3 Val6
Key4
Key5
Key6
然后像这样删除空值键
HashMap
Key1 Val1
Key2 Val4
Key3 Val6
使用
HashMap
无法有意义地实现这一点,因为它没有定义的顺序,因此没有“第二个键”Key2
——可以将Val4
向上移动
但是,如果您有一个有序的映射
,例如树映射
(此代码通常适用于任何可变的映射
;但它仅在定义了迭代顺序的映射上提供可预测的结果),则可以执行此操作:
iteratorhis没有真正意义,因为HashMap
没有定义的顺序,所以没有第二个键“Key2”。您可以轻松删除具有空值的键,但是:map.values().removeIf(Objects::isNull)
。
Iterator<? extends Map.Entry<?, V>> entryIterator = map.entrySet().iterator();
// Find non-null values, set the next entry's value to that.
for (String val : map.values()) {
if (val != null) {
entryIterator.next().setValue(val);
}
}
// Remove the rest of the entries, because we have no non-null
// values to assign to them.
while (entryIterator.hasNext()) {
entryIterator.next();
entryIterator.remove();
}