2012-07-17 53 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();