像这样存储多个信息是否很好:
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<Map<Integer, Object>> l = new ArrayList<Map<Integer, Object>>();
Map<Integer, Object> m = new HashMap<Integer, Object>();
m.put(123, null);
l.add(m);
我想还有更好的方法。
在我的情况下,我需要存储一个类别列表以及有多少文章正在使用这个类别的信息。
那为什么不使用 a List<CategoryUsage>
,CategoryUsage
包含 a 的类在哪里Category
,以及使用它的文章数量?恕我直言,更具可读性、类型安全、可维护和面向对象。
如果您想存储我将使用的每个类别的文章计数
Map<Category, Integer> categoryCountMap = ...
我认为你是在正确的方式。但您也可以将其他信息封装在类中并放置对象列表
像这样
Class CategorieModel{
private Integer articlies;
private Categories categories;
//Constructors
//getters and setters
}
List<CategorieModel> m = new ArrayList<CategorieModel>();
m.add(new CategorieModel(111,null));
您需要更清楚您正在使用的术语。什么是“类别”,什么是“文章”?
在您的示例中:
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
您想在类别和文章之间建立多对多的关系吗?如果是这样,那么我建议您:
Map<Category, Set<Article>>
对于每个类别,如果您想知道该类别的文章数量,您只需检查映射到该类别的集合的大小。但是,如果您想找出特定文章属于多少个类别,则必须通过遍历每个类别并检查该集合是否包含您感兴趣的文章来计算出来。
更新
您在其中一个评论中提到了 Hibernate,也许您正在寻找的是双向多对多关系?即,您的 Category 对象将包含属于该类别的文章集合,而您的 Article 对象将包含它所属的类别集合。
如果是这种情况,请查看以下问题:
讨论双向多对多关系。
我会使用番石榴的多图。
http://code.google.com/p/guava-libraries/
Multimap<Category, Article> categorysToArticles = HashMultimap.create();
将所有类别放到文章关系中;
categoryToArticles.put(category, article);
获取一个类别中的所有文章;(作为一个集合)
categoryToArticles.get(category);
获取类别中的文章数;
categoryToArticles.get(category).size();