如何删除ArrayList <arraylist <string>&gt;的重复项并排序数组</arraylist <string>

时间:2014-06-03 17:11:34

标签: java android arrays arraylist

假设我有一个字符串数组的数组:

ArrayList<ArrayList<String>> arrayOfArray= new ArrayList<ArrayList<String>>();

也许它看起来像这样(例如): arrayOfArray = [[A,1,B,2],[C,1,D,2],[C,1,D,2],[A,1,B,2]]

最后我想要这个(重复删除): arrayOfArrayNoDuplicates = [[C,1,D,2],[A,1,B,2]]

然后作为最后一步,我希望这个数组数组在数组中的第一个项目上排序。 看起来这个数组数组可能在A或B上排序。 arrayOfArraySorted = [[A,1,B,2],[C,1,D,2]]

如果没有对内部数组进行排序,这是否可行?我想保持数组内的顺序&#34; A,1,B,2&#34;。

我希望你明白我想做的事情:)

/ M

4 个答案:

答案 0 :(得分:1)

您使用set

它的功能类似于数组,它会重复数据删除

答案 1 :(得分:0)

 for (int i=0;i<arrayOfArray.size();i++)
        {

        ArrayList al = arrayOfArray.get(i);
        // add elements to al, including duplicates
        HashSet hs = new HashSet();
        hs.addAll(al);
        al.clear();
        al.addAll(hs);
        arrayOfArray.set(i, al);
        }

答案 2 :(得分:0)

您应该使用HashSet或类似内容从您的数据集合中删除重复项(集合只能包含唯一元素)。我不确定这会对ArrayList不同内容的效果有多大,因此您最好延长ArrayList<String>并实施自己的bool equals(Object a)方法(对于你的内部数组)。

然后,您应该使用Collections.sort()对收藏品进行排序,然后您可以将其传递给自定义Comparator,以便按您喜欢的顺序对其进行排序。 (比较器允许您提供一种方法,该方法需要2个对象并对其订单进行评级。)或者如果您已经扩展ArrayList<String>,只需将compare方法添加到您的班级并添加implements Comparator

示例比较器将是;

import java.util.*;
class ALComparator implements Comparator<ArrayList<String>>
{
    @Override
    public int compare(ArrayList<String> a, ArrayList<String> b)
    {
        if(a.size()==b.size())
            return 1;
        if(a.size()==0)
            return -1;
        if(b.size()==0)
            return 1;
        return a.get(0).compareTo(b.get(0));
    }
}

答案 3 :(得分:0)

您可以使用Set with Comparator。

Set<List<String>> list = new TreeSet<ArrayList<String>>(
             new Comparator<List<String>>() {
               public int compare(List<String> left, List<String> right) {
                  //check here if equal, before or after...    

               }
             }
         );