我有一张我已填充的地图(说它是HashMap)。我希望它减小尺寸...我不关心我删除哪些元素,我只想删除k元素。
最有效的方法是什么(迭代除外)?
编辑: k事先未知。基于其他类型地图的建议是相关的。
答案 0 :(得分:2)
如果它的HashMap,我认为没有比迭代更好的选择,但如果你可以使用TreeMap使用这个......
map.headMap(key).clear();
<强>例如强>
public class Test
{
public static void main( String[] args )
{
SortedMap<Integer,String> map = new TreeMap<Integer,String>();
map.put( 1, "HI" );
map.put( 2, "BYE" );
map.put( 4, "GUY" );
map.put( 7, "SKY" );
map.put( 9, "HELLO" );
System.out.println(map.keySet());
map.headMap(5).clear(); // 5 is exclusive
System.out.println(map.keySet());
}
}
答案 1 :(得分:2)
为什么不迭代?您可以从迭代器中删除,这可能非常有效 - 无需额外查找:
Iterator<Map.Enty<Foo, Bar>> it = map.entrySet().iterator();
for (int i = 0; i < k && it.hasNext; i++)
{
it.next();
it.remove();
}
答案 2 :(得分:0)
迭代是唯一的方法。
// this is the number of items you want to remove
final int NUMBER_TO_REMOVE = 2;
// this is your map
Map<String, String> map = new HashMap<String, String>();
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
map.put("d", "4");
map.put("e", "5");
map.put("f", "6");
map.put("g", "7");
map.put("h", "8");
map.put("i", "9");
// get the keys
String[] keys = map.keySet().toArray(new String[map.size()]);
// remove the correct number from the map
for(int i = 0; i < NUMBER_TO_REMOVE; i++) {
map.remove(keys[i]);
}
// your map is now NUMBER_TO_REMOVE elements smaller
答案 3 :(得分:0)
通用散列图只有有限数量的接口函数。如果K很小,我没有看到任何明显比迭代更好的方法,并且一旦K键被移除就会突破迭代。当然,如果K很大,那么做其他事情可能会更好,例如保留size-k元素和清除。如果您需要特定的特性,您自己的hashmap可以具有您需要的任何特性。