有人能告诉我如何在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);
}
答案 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<>());
}
这样做,代码更容易阅读。