如何从ArrayList获取重复值?

时间:2014-03-23 16:29:43

标签: java arrays arraylist duplicates

我有一个ArrayList:ArrayList<String> buffer = new ArrayList<String>();

如何从ArrayList中获取重复值?

示例:

fsfs.txt
erwre.txt
wery.txt
wtrtr.txt
erwre.txt
qweq.txt

我的尝试:

有周期:

for(int i = 0; i < buffer.size(); i++) {
    for(int j = i + 1; j < buffer.size(); j++) {
        if( buffer.get(i).equals(buffer.get(j)) ) {
            bufferTemp.add(j, buffer.toString() ); 
            j--;
        }
    }
 }

With iterator:
Iterator<String> i = buffer.iterator();
Iterator<String> j = buffer.iterator();
j.next();
     while(i.hasNext() && j.hasNext()) {
        if( i.next().equals(j.next() )
        System.out.println(i.next());
     }

此外,我尝试使用Comparable,Comparator和其他方法,但它不起作用。

2 个答案:

答案 0 :(得分:1)

您可以创建一个Set,将您的列表作为参数传递。 Set将负责重复。

private static List<String> list = new ArrayList<String>();

public static void main(String[] args) {

    list.add("aaa.txt");
    list.add("aaa.txt");
    list.add("aaa.txt");
    list.add("bbb.txt");
    list.add("ccc.txt");
    list.add("ccc.txt");

    Set<String> set = new HashSet<String>(list);

    System.out.println(set);
}

答案 1 :(得分:0)

如果我理解正确,您使用Java并希望得到ArrayList的副本。

如果你使用字符串,那么你可以只对List进行排序,并在循环中比较前一个与当前元素。看看这个(Java 7):

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

list.add("fsfs.txt");
list.add("erwre.txt");
list.add("wery.txt");
list.add("wtrtr.txt");
list.add("erwre.txt");
list.add("qweq.txt");

// Sort the list
Collections.sort(list);

// Test if List was sorted correctly
for(String s : list)
{
    System.out.println(s);
}

System.out.println("\n*** Now try to get duplicates ***\n");

Iterator<String> listIt = list.iterator();

String prev = "";
boolean foundDuplicate = false;
while(listIt.hasNext())
{
    String current = listIt.next();

    if(current.equals(prev))
        foundDuplicate = true;
    else
        foundDuplicate = false;

    if(foundDuplicate)
    {
        // Duplicate found!
        System.out.println(current);
    }

    prev = current;
}

输出应为:

erwre.txt
erwre.txt
fsfs.txt
qweq.txt
wery.txt
wtrtr.txt

*** Now try to get duplicates ***

erwre.txt