繁体   English   中英

在Java中设置哈希表数组

[英]Setting up an array of hashtables in Java

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

之前我一直在使用哈希表的数组列表,但是在对其进行编译时,会出现一条警告,指示我的Java文件使用未经检查或不安全的操作来与-Xlint重新编译。 当我重新编译程序时,似乎Java不喜欢哈希表的数组列表...

我的代码是这样的:

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

像这样尝试:

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? 这样的魔术数字是一个非常糟糕的主意。

您将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+

你的问题是

Hashtable temp = new Hashtable();

Hashtable<Integer,Integer>不同的通用定义。 如果您将其替换为

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

这个问题应该消失了。 另外,请考虑改用HashMap 看到HashMap和Hashtable之间的区别了吗?

除非您不使用旧的JDK,否则我建议使用Diamond构造函数

第二个建议是您的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<>());
        }

这样,代码更容易阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM