gpt4 book ai didi

java - 如何使用静态类有效地从 HashMap 中获取值?

转载 作者:行者123 更新时间:2023-12-01 05:30:35 25 4
gpt4 key购买 nike

我的类(class)有 HashMap<k,v>HashMap 值的类型是一个静态类,它有两个不同的对象作为属性。即,

   public class Example {
private HashMap<String, StaticClassExample> map;
private static class StaticClassExample {
private Object1 o1;
private Object2 o2;
//...
}
//...
}

我的问题是如何有效地执行此操作:

   public List<Object1> getAllObject1() {}

我知道我能做到:map.values()然后迭代值集合并从每个 StaticClassExample 获取 Object1,但这效率不高。我可能会问什么,或者我必须为我的目的创建另一个 HashMap ?

最佳答案

如果您不介意一些内存开销,您可以保留一个包含 o1 值的单独列表:

public class HashMapList
{
private HashMap<String, StaticClassExample> map = new HashMap<String, HashMapList.StaticClassExample>();

private List<Object> o1List = new LinkedList<Object>();

public static class StaticClassExample
{
private Object o1;
private Object o2;
}

public void addStaticClassExample(String key, StaticClassExample example)
{
StaticClassExample oldVal = map.put(key, example);
if(oldVal != null)
{
o1List.remove(oldVal.o1);
}
o1List.add(example.o1);
}

public StaticClassExample getStaticClassExampleByKey(String key)
{
return map.get(key);
}

public void removeStaticClassExampleByKey(String key)
{
StaticClassExample removed = map.remove(key);
if(removed != null)
{
o1List.remove(removed.o1);
}
}

public List<Object> getAllObject1()
{
return Collections.unmodifiableList(o1List);
}

}

当然,这需要您将 HashMap 封装在类中,并且永远不要直接访问它,因为这样使用该类的人可以直接修改 HashMap,并且 List 将不再与 Map 同步。请注意,getAllObject1 返回内部列表的不可修改 View ,因此无法从类外部对其进行修改。

关于java - 如何使用静态类有效地从 HashMap 中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9044304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com