假设我有一个字符串数组的数组:
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
答案 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...
}
}
);