[英]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.