2013-12-16 161 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