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