2014-04-05 81 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<>()); 
     } 

这样做,代码更易于阅读。