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

Java 如何使用静态类从HashMap有效地获取值?,java,hashmap,static-class,Java,Hashmap,Static Class,我有一个带有HashMap的类。 这个HashMap的值类型是一个静态类,它有两个不同的对象作为属性。i、 e public class Example { private HashMap<String, StaticClassExample> map; private static class StaticClassExample { private Object1 o1; private Object2 o

我有一个带有HashMap的类。 这个HashMap的值类型是一个静态类,它有两个不同的对象作为属性。i、 e

   public class Example {
      private HashMap<String, StaticClassExample> map;
      private static class StaticClassExample {
           private Object1 o1;
           private Object2 o2;
           //...   
      }
      //...
   }
我的问题是,我如何才能有效地执行此操作:

   public List<Object1> getAllObject1() {}
我知道我可以这样做:map.values,然后迭代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,并且列表将不再与该映射同步。请注意,getAllObject1返回内部列表的不可修改视图,因此不能从类外部对其进行修改。

作为一个静态类,它与任何事情都有什么关系?当然,唯一相关的是你想要从地图值中得到一个投影。坦白地说,如果不让它变得非常脆弱,那么很难让它变得非常高效。。。你真的需要一个列表而不仅仅是一个列表吗?你真的需要一个列表吗?否则,您可以将其设置为惰性…是的,我需要一个包含hashmap中所有Object1的列表。所以我想我必须选择另一种表示方式……为什么您认为从map.values构建列表是低效的?您是否分析了您的程序并确定它占用了90%的总执行时间?如果你没有,那你就是在浪费时间担心没有意义的事情。为什么你需要一份清单?你要把它交给第三方图书馆吗?如果没有,则更改代码以获取集合,并将值结果传递给它。是的,正如我所猜测的,我必须创建一个更完整的表示。泰。