2012-07-17 417 views
0

是好来存储多种信息是这样的:Java集合 - 存储多个信息

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); 

我想有一个更好的办法。

在我的情况下,我需要存储一个类别列表和信息多少文章正在使用这个类别为每个。

+1

你是什么意思的'类别列表? – 2012-07-17 13:17:13

+0

类别存储在我的数据库中。它只是一个Hibernate对象。 – dtrunk 2012-07-17 13:19:01

+0

[Object Denial!](http://stackoverflow.com/a/372​​5728/40342)(我不会停止发布该链接,直到该术语广受欢迎;-)) – 2012-07-17 13:38:31

回答

4

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

2

如果你想存储每个类别的物品的数量,我会用

Map<Category, Integer> categoryCountMap = ... 
1

我认为你是正确的方式。但是你也可以封装在类中的其他信息,并把对象

列表筛选

Class CategorieModel{ 
    private Integer articlies; 
    private Categories categories; 
//Constructors 

//getters and setters 

} 

List<CategorieModel> m = new ArrayList<CategorieModel>(); 

m.add(new CategorieModel(111,null)); 
0

你需要你正在使用的条款更清晰。什么是“类别”,什么是“文章”?

在您的例子:

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

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

有什么地图的价值点,如果你只是传递NULL?

如果你真的只是想有一个参考的每个分类计数1点最简单的方法:

Map<Category, Integer> categoryCount = ... 

,或者您可以使用从类别主键来保持数,以及:

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

或者如果你想知道哪个文章引用那个分类:

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

会工作t OO,后来才知道有多少文章,你可以永远只是做:

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

你想拥有的类别和文章之间的许多一对多的关系?如果是这样的话,我会建议你:

Map<Category, Set<Article>> 

这种方式为每个类别,如果你想知道的该类别你只需要检查映射到类别集的大小物品计数。但是,如果要查明特定文章属于多少个类别,则必须通过检查每个类别并检查该集合是否包含您感兴趣的文章来解决。

更新

你在你的评论中提到了Hibernate,也许你正在寻找的是双向的多对多关系?即您的Category对象将拥有该类别中的文章集合,并且您的Article对象将拥有它所属的类别集合。

如果是这样,则情况下,检查了这样一个问题:

Hibernate Bidirectional Many to Many implementation

对双向许多一对多关系的讨论。

0

我会使用番石榴的多图。

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

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

把所有类别的文章的关系;

categoryToArticles.put(category, article); 

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

categoryToArticles.get(category); 

获得类别中文章的计数;

categoryToArticles.get(category).size();