快速搜索arrayList的方法

时间:2015-11-19 14:46:36

标签: java arraylist contains

我有一个arraylist Arraylist<String[]>,我试图找到一种快速查找String[]特定索引的特定值的方法。我的ArrayList总是包含长度为String[]的长度2.而我想要做的是查看具有特定值ArrayList的{​​{1}} String[] str[1]="value" 1}}。我知道我可以遍历ArrayList获取每个元素(String[]),然后使用str[1].equals("value")查找值,但我想知道是否有更快的方法来执行此操作可能使用contains()的{​​{1}}或其他内容。 感谢

PS:我不知道我的数组的第一个元素(ArrayList)的值,所以我无法构造一个新的str[0]并检查String[]是否包含

3 个答案:

答案 0 :(得分:1)

LinkedHashMap的

如何使用LinkedHashMap<String, String[]>代替ArrayList?关键是String[1]值。 Linked因为它为您提供了可预测的迭代顺序。

辅助地图

或者您可以创建一个Map<String, Integer>,其中键是String[1]值,该值是String[]ArrayList的索引。

ArrayList<String[]> al = new ArrayList<>();
Map<String, Integer> alIndexMap = new HashMap<>();
// ...
Integer nextIndex = al.size();
al.add(someStringArray);
alIndexMap.put(someStringArray[1], nextIndex);

如果您始终保持alalIndexMap同步,则您始终知道al中您要查找的数组的位置。< / p>

番石榴BiMap

Google的 Guava 有一些实现其BiMap界面的课程。它与Map类似,但它可以双向运行,例如,如果您愿意,可以将value用作key

答案 1 :(得分:1)

如果你看一下ArrrayList#contains - 你会看到,这个方法也遍历所有元素。

您可以使用parallelStream - 以便可以通过更多线程搜索ArrayList。

    List<String[]> listToSearchIn = new ArrayList<String[]>();

    List<String[]> matches = listToSearchIn.parallelStream()
            .filter((element) -> element[1].equals("value"))
            .collect(Collectors.toList());

答案 2 :(得分:0)

除非您的ArrayList已排序,否则O(n)效率是您可以做的最佳效果。除非通过&#34;快速方式&#34;你的意思是一种为你做迭代的方法。即使在这种情况下答案也是肯定的,因为您想要检查String []对象本身内部的数据。