在ArrayLists的ArrayList中查找唯一的Arraylist

时间:2014-01-03 21:08:33

标签: java arraylist

据我所知,ArrayList类继承其父“List”类的equals()函数,以查找两个成员对象是否相同。这是否意味着'contains()'线性搜索(使用'equal')表示ArrayList中的重复条目?那么'包含'的复杂性是O(n)?

如果我使用的是Arraylist的ArrayList,那么contains函数的复杂度将是O(n * m)?如果是,那么是否有任何替换contains函数可以获得成员ArrayList的一些哈希(基于内容)并确认两个ArrayList对象是否相等?

编辑:我只是想在ArrayList的ArrayList中查找多个唯一元素。像{{0,0,3},{1,2,3},{0,0,3}}应该{{0,0,3},{1,2,3}}。

2 个答案:

答案 0 :(得分:1)

如果您已有ArrayList<ArrayList<Integer>>,则可以将其传递给HashSet<ArrayList<Integer>>的构造函数,并拥有一组唯一的ArrayLists

List<ArrayList<Integer>> mylist_list = new ArrayList<ArrayList<Integer>>(); 
ArrayList<Integer> mylist = new ArrayList<Integer>();
...
for(ArrayList<Integer> list : mylist_list)
{
    System.out.println(Arrays.toString(list.toArray()));
}
Set<ArrayList<Integer>> mylist_set = new HashSet<ArrayList<Integer>>(mylist_list);

for(ArrayList<Integer> list : mylist_set)
{
    System.out.println(Arrays.toString(list.toArray()));            
}

产生

的输出
[0, 1, 2]
[0, 1, 2]
[0, 1, 2]

将重复项传递给ArrayList<ArrayList<Integer>>

答案 1 :(得分:0)

复杂性是O(N)。 接下来的实施:

 public int indexOf(Object o) {
    if (o == null) {
        for (int i = 0; i < size; i++)
            if (elementData[i]==null)
                return i;
    } else {
        for (int i = 0; i < size; i++)
            if (o.equals(elementData[i]))
                return i;
    }
    return -1;
}

是的,contains调用indexOf方法。