2014-04-05 53 views
2

有人能告訴我如何在java中正確定義哈希表數組?我需要這個的目的是我有6個節點,並且每個節點可以有多個鏈接,其中鏈接由linkid(int)和value(int)組成。如果有人有任何建議,我將不勝感激。每個節點可以有多個鏈接。在Java中設置哈希表數組

我一直在使用hashtables的數組列表,但是當編譯它時,會出現一個警告,顯示我的java文件使用未檢查或不安全的操作,用-Xlint重新編譯。當我重新編譯程序,看來,Java不喜歡哈希表的ArrayList ...

我的代碼是這樣的:

ArrayList<Hashtable<Integer,Integer>> DB_entry; 
DB_entry = new ArrayList<Hashtable<Integer,Integer>>(); 
    for (int i = 0; i < 6; i++) 
    { 
     Hashtable temp = new Hashtable(); 
     DB_entry.add(temp); 
    } 

回答

3

試試這樣說:

List<Map<Integer,Integer>> DB_entry = new ArrayList<Map<Integer, Integer>>(); 
for (int i = 0; i < 6; i++) { 
    Map<Integer, Integer> row = new HashMap<Integer, Integer>(); 
    // Populate the map here. 
    DB_entry.add(row); 
} 

Hashtable是JDK 1.0的數據結構; HashMap是優選的。

什麼是6?這樣的幻數是一個非常糟糕的主意。

1

您定義DB_entryArrayList<Hashtable<Integer,Integer>>但你嘗試添加Hashtable元素對它來說,這與向其添加Hashtable<Object,Object>元素相同。在你的循環中定義你的Hashtable s爲Hashtable<Integer, Integer> temp = new Hashtable<Integer, Integer>();!或者Hashtable<Integer, Integer> temp = new Hashtable<>();如果您使用的是Java 7+

1

你的問題是,

Hashtable temp = new Hashtable(); 

是不一樣的一般定義爲Hashtable<Integer,Integer>。如果將其替換爲

Hashtable<Integer,Integer> temp = new Hashtable<>(); 

該問題應該消失。另外,請考慮使用HashMap。見Differences between HashMap and Hashtable?

0

除非你不使用舊的JDK,我建議使用菱形構造

第二個建議是,你DB_entry,應該是一個類型的List,不ArrayList

第三,正如有人提到過,你應該使用HashMap,因爲它好多了。

除非您不在該循環中對新地圖做某些事情,否則無需將其作爲局部變量創建。

您的代碼應該是這樣的:

List<Map<Integer, Integer>> DB_entry; 
     DB_entry = new ArrayList<>(); 
     for (int i = 0; i < 6; i++) { 
      DB_entry.add(new HashMap<>()); 
     } 

這樣做,代碼更易於閱讀。