我正在尝试查找arraylist中的条目项的相应值(字母数字值及其哈希码)。
删除了hashmap的使用以允许复制对象(键)。
ArrayList<Object[]> pNArrayList = new ArrayList<Object[]>();
包含
[101E2571G103, -1162488899]
[101E2571G103, -1162488899]
[116E3139P001, -1561106156]
[314B7159G003, -1344220682]
[117E3640G025, -1595019143]
[117E3640G025, -1595019143]
对于长
类型的输入inputID
for(int i=0; i< pNHashArrayList.size();i++) {
if(pNArrayList.get(i)[1].equals(inputID)){
System.out.println(pNArrayList.get(i)[0]);
}
else {
System.out.println(pNArrayList.get(i)[0] + " and "+ pNArrayList.get(i)[1] +" No Match Found");
}
}
此后的else
和SysOut
声明仅包含在交叉验证中。
输出:
101E2571G103 and -1162488899 No Match Found
101E2571G103 and -1162488899 No Match Found
116E3139P001 and -1561106156 No Match Found
314B7159G003 and -1344220682 No Match Found
117E3640G025 and -1595019143 No Match Found
117E3640G025 and -1595019143 No Match Found
我认为,问题可能出在pNArrayList.get(i)[1].equals(inputID)
?需要一些建议。
另外,我的实际数据集大约有10,000个,循环查找会不会有运行时计算的问题?
答案 0 :(得分:2)
我不知道你是如何构建数据结构的。但是,更好的设计是将Map<Long, List<Object>>
作为密钥使用长inputID
,并且值可以是所有属于同一ID的Object
列表。这样,您支持同一个键的多个值,查找为O(1)
关于等于,调用Object
的等于,而不是Long
。建议的数据结构也应该解决这个问题。
答案 1 :(得分:0)
@sharonbn建议使用好方法,但您可以尝试运行现有代码:
if( ((Long)pNArrayList.get(i)[1]) == inputID){
System.out.println(pNArrayList.get(i)[0]);
}
else {
System.out.println(pNArrayList.get(i)[0] + " and "+ pNArrayList.get(i)[1] +" No Match Found");
}
}