在Java中设置哈希表数组

时间:2014-04-05 17:17:18

标签: java hashtable

有人能告诉我如何在java中正确定义哈希表数组吗?我需要它的目的是我有6个节点,每个节点可以有许多链接,其中链接由linkid(int)和value(int)组成。如果有人有任何建议,我将不胜感激。每个节点都可以有多个链接。

我以前一直在使用哈希表的arraylist但是在编译它时,会出现一个警告,我的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);
    }

4 个答案:

答案 0 :(得分: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 :(得分:1)

您将DB_entry定义为ArrayList<Hashtable<Integer,Integer>>,但您尝试向其中添加Hashtable元素,这与向其添加Hashtable<Object,Object>元素相同。在循环中将Hashtable定义为Hashtable<Integer, Integer> temp = new Hashtable<Integer, Integer>();!或Hashtable<Integer, Integer> temp = new Hashtable<>();如果您使用的是java 7 +

答案 2 :(得分:1)

你的问题是那个

Hashtable temp = new Hashtable();

Hashtable<Integer,Integer>的通用定义不同。如果用

替换它
Hashtable<Integer,Integer> temp = new Hashtable<>();

该问题应该消失。另外,请考虑使用HashMap。见Differences between HashMap and Hashtable?

答案 3 :(得分: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<>());
        }

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