2013-12-16 162 views
1

ArrayListsArrayList中搜索单个元素的最有效方法是什么?鉴于以下几点:搜索ArrayList的ArrayList

ArrayList<ArrayList<Integer>> intList = new ArrayList<ArrayList<Integer>>(); 
ArrayList<Integer> a = new ArrayList<>(); 
a.add(1); 
a.add(2); 
ArrayList<Integer> b = new ArrayList<>(); 
b.add(3); 
b.add(4); 
intList.add(a); 
intList.add(b); 

如何将搜索,看看是否ArrayListintList包含特定Integer,像3

+0

没有有效的解决方案,我能想到。也许如果你描述了更大的问题,可以找到更有效的数据结构? – radai

+0

循环整个2-D阵列是否足够高效? – Haozhun

+0

[The ideas here](http://stackoverflow.com/questions/3477442/algorithm-efficient-way-to-search-an-integer-in-a-two-dimensional-integer-array)可能有助于 –

回答

4

只是遍历所有列表并询问它们是否包含您的值。

public boolean contains(int x, ArrayList<ArrayList<Integer>> listOfLists) { 
    for (ArrayList list: listOfLists) { 
     if (list.contains(x)) return true; 
    } 
    return false; 
} 

但是,我同意radai。可能需要更高效的数据结构而不是有效的算法

+0

谢谢。我同意我可以创建一个更有效的数据结构,但在一个小问题中,这很好。不知道是否有我不知道的功能。 –

+0

@Adam_G对于整数列表未排序的一般情况,这是您可以做的最好的。但是,如果每个'List '碰巧都被填充了一个单调递增的序列(如示例中所示),则可以将性能从O(n^2)提高到O(n log n)。如果没有两个'List '有重叠范围(再次,如您的示例),您可以将搜索性能提高到O(log n)。 – rob