【问题标题】:Java Collections - Store multiple InformationJava 集合 - 存储多个信息
【发布时间】:2012-07-17 13:15:06
【问题描述】:

这样存储多个信息好不好:

List<Map<Integer, Object>> l = new ArrayList<Map<Integer, Object>>();

Map<Integer, Object> m = new HashMap<Integer, Object>();
m.put(123, null);
l.add(m);

我想有更好的方法。

在我的情况下,我需要存储一个类别列表以及有多少文章正在使用该类别的信息。

【问题讨论】:

  • List of Categories 是什么意思?
  • 类别存储在我的数据库中。它只是一个 Hibernate 对象。
  • Object Denial!(在这个词广泛流行之前,我不会停止发布该链接;-))

标签: java


【解决方案1】:

那为什么不使用List&lt;CategoryUsage&gt;,其中CategoryUsage是一个包含Category的类,以及使用它的文章数量?恕我直言,更具可读性、类型安全、可维护和面向对象。

【讨论】:

    【解决方案2】:

    如果您想存储我将使用的每个类别的文章计数

    Map<Category, Integer> categoryCountMap = ...
    

    【讨论】:

      【解决方案3】:

      我认为你是在正确的方式。但你也可以将其他信息封装在类中并放置一个对象列表

      这样

      Class CategorieModel{
         private Integer articlies;
         private Categories categories; 
      //Constructors
      
      //getters and setters
      
      }
      
      List<CategorieModel> m  = new ArrayList<CategorieModel>();
      
      m.add(new CategorieModel(111,null));
      

      【讨论】:

        【解决方案4】:

        您需要更清楚自己使用的术语。什么是“类别”,什么是“文章”?

        在你的例子中:

        List<Map<Integer, Object>> l = new ArrayList<Map<Integer, Object>>();
        
        Map<Integer, Object> m = new HashMap<Integer, Object>();
        m.put(123, null);
        

        如果你只是传入 NULL,那么 Map 的值有什么意义?

        如果您真的只想计算对每个类别的引用计数,那么一种最简单的方法:

        Map<Category, Integer> categoryCount = ...
        

        或者您也可以使用 Category 中的主键来保持计数:

        Map<Integer, Integer> categoryCount = ... // the Map key is Category.getId()
        

        或者如果您想知道哪个文章引用了该类别:

        Map<Category, List<Article>> categoryArticleRef = ... 
        

        也可以,然后要知道您总是可以做多少篇文章:

        categoryArticleRef.get(category).size(); // need NPE check, etc
        

        【讨论】:

          【解决方案5】:

          您想在类别和文章之间建立多对多关系吗?如果是这样,那么我建议您:

          Map<Category, Set<Article>>
          

          对于每个类别,如果您想知道该类别的文章数量,您只需检查映射到该类别的集合的大小。但是,如果您想了解某篇文章属于多少个类别,则必须通过遍历每个类别并检查该集合中是否包含您感兴趣的文章来计算。

          更新

          您在其中一个 cmets 中提到了 Hibernate,也许您正在寻找的是双向多对多关系?即,您的 Category 对象将包含属于该类别的文章集合,而您的 Article 对象将包含其所属的类别集合。

          如果是这种情况,请查看以下问题:

          Hibernate Bidirectional Many to Many implementation

          关于双向多对多关系的讨论。

          【讨论】:

            【解决方案6】:

            我会使用来自番石榴的多重地图。

            http://code.google.com/p/guava-libraries/

            Multimap<Category, Article> categorysToArticles = HashMultimap.create();
            

            将所有类别放到文章关系中;

            categoryToArticles.put(category, article);
            

            获取一个类别中的所有文章; (作为一个集合)

            categoryToArticles.get(category); 
            

            获取某个类别中的文章数;

            categoryToArticles.get(category).size();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-05-29
              • 2013-10-23
              • 2015-07-09
              • 2021-02-26
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多