【问题标题】:Lookup in arrayList在数组列表中查找
【发布时间】:2016-04-04 11:47:49
【问题描述】:

我正在尝试查找数组列表中条目项的相应值(字母数字值及其哈希码)。

已放弃使用 hashmap 以允许复制对象(键)。

ArrayList<Object[]> pNArrayList = new ArrayList<Object[]>(); 包含

[101E2571G103, -1162488899]
[101E2571G103, -1162488899]
[116E3139P001, -1561106156]
[314B7159G003, -1344220682]
[117E3640G025, -1595019143]
[117E3640G025, -1595019143]

对于输入,inputID 类型为 long

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 个整体,通过循环进行查找是否会对运行时计算产生问题?

【问题讨论】:

  • 同时打印Sysout中inputID的值,进一步调试为什么不等于pNArrayList.get(i)[1]
  • @Mahendra inputID-1595019143,它实际上存在于 ArrayList 中。这是我无法理解问题的地方。

标签: java loops arraylist data-structures


【解决方案1】:

我不知道您是如何构建数据结构的。但是,更好的设计是有一个Map&lt;Long, List&lt;Object&gt;&gt;,其中Long inputID 作为key,值可以是一个Objects 的List,它们都属于同一个ID。这样你就支持同一个键的多个值并且查找是 O(1)

关于等号,调用的是Object 的等号,而不是Long 一个。建议的数据结构也应该解决这个问题。

【讨论】:

  • 有没有办法处理现有数据结构的问题?
【解决方案2】:

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

【讨论】:

  • 对我有用的是将空字符串添加到if (pNArrayList.get(i)[1].equals(""+inputID))
  • 这只有在您将 inputID 添加为 Object[] 中的字符串的情况下才有可能。但正如您提到的“对于输入,inputID 类型为 long”,那么您正在检查 Long 对象与 String 对象的相等性。
猜你喜欢
  • 2017-11-27
  • 2021-11-08
  • 2023-03-15
  • 2017-12-23
  • 2012-05-17
  • 1970-01-01
  • 2022-11-01
  • 2016-11-18
  • 2017-05-07
相关资源
最近更新 更多