Solved

# finding duplicates in arraylist

Posted on 2007-12-01
2,624 Views
I am using the method below to find the duplicates in an array list and remove them.  It works, but only finds the first duplicate.  So for instance if the list is "1", "1","1","2","2","3", the unique list is 1, 1, 2, 3.  Anyone know why that is?
public void topTalkers()
{

int i, j, k;

ArrayList arr = new ArrayList();
string[] unTemp = new string[recordNum];

for (int x = 0; x < recordNum - 1; x++)
{
unTemp[x]= srcIP[x];
}
for (k = 0; k < unTemp.Length-1; k++)
{
}
arr.Sort();

for (i = 0; i < arr.Count - 1; i++)
{
for (j = i + 1; j < arr.Count; j++)
{
if (arr[i].Equals(arr[j]))
{
MessageBox.Show("duplicate removed: " + arr[j]);
arr.RemoveAt(j);
}
}
}

for (k = 0; k < arr.Count; k++)
{
MessageBox.Show(arr[k].ToString());

}
}

0
Question by:aareedy

LVL 55

Accepted Solution

Jaime Olivares earned 125 total points
ID: 20389304
try with:
for (i = 0; i < arr.Count - 1; i++)
{
for (j = i + 1; j < arr.Count;)
{
if (arr[i].Equals(arr[j]))
{
MessageBox.Show("duplicate removed: " + arr[j]);
arr.RemoveAt(j);
}
else
j+;
}
}

0

LVL 29

Expert Comment

ID: 20389399
As the list is sorted, you can reduce the comparisons you do drastically. You don't have to compare every item to all the other items, you only have to compare the items that are next to each other:
``````for (int i = 1; i < arr.Count;) {

if (arr[i-1].Equals(arr[i]) {

MessageBox.Show("Duplicate removed: " + arr[i].ToString());

arr.RemoveAt(i);

} else {

i++;

}

}
``````
0

LVL 40

Expert Comment

ID: 20389407
>> Anyone know why that is?
The problem is being caused by you removing the dup, which shuffles everything after it down one but then you increment j so you are missing the next one.

jaime_olivares suggested fix should over-come this.

Example: -

`````` 0   1   2   3   4   5

"1","1","1","2","2","3",

i=0, j=1

arr[i] = 1

arr[j] = 1

dup found and removed

j++

0   1   2   3   4   5

"1","1","2","2","3",

i=0, j=2

arr[i] = 1

arr[j] = 2

dup missed
``````
0

Author Closing Comment

ID: 31412134
Thanks! Great help!
0

## Featured Post

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …