在arrayList中查找

时间:2016-04-04 11:47:50

标签: java loops arraylist data-structures

我正在尝试查找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");
            }
        } 

此后的elseSysOut声明仅包含在交叉验证中。

输出:

 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个,循环查找会不会有运行时计算的问题?

2 个答案:

答案 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");
        }
    }