Kolla dubletter i en ArrayList

Java

7 svar · 819 visningar · startad av Re-JeeP

Medlem sedan sep. 200642 inlägg
Trådstart#1

Hej!

Jag vill kolla ifall en ArrayList har några dubletter.
Finns det ingen färdig metod för det?
Om inte hur gör jag snyggast för att kolla det?

Obs! listan innehåller strängar!

Mvh // Johan

Medlem sedan maj 2005704 inlägg
#2

Mig veterligen finns det ingen inbyggd funktion.
Ett i min mening smidigt sätt att göra det på:

function removeDouble(arr) {
   var o=new Object();
   var i=arr.length;
   var a=new Array();
   var t=new String();
   while(i--){
	t=arr[i];
	o[t]=t;
   }
   for(i in o){
	a.push(o[i]);
   }
   return a;
}
Medlem sedan feb. 20041 816 inlägg
#3

Du skulle kunna konvertera om listan till ett Set. Eftersom ett Set inte kan innehålla dubletter är det bara att jämföra antalet element med listan. Vet ej om det är den snyggaste lösningen dock.

Om du vill kolla om ett element finns i listan innan det läggs till kan du kolla det mha contains().

Medlem sedan sep. 200642 inlägg
#4

dAEk skrev:

Du skulle kunna konvertera om listan till ett Set. Eftersom ett Set inte kan innehålla dubletter är det bara att jämföra antalet element med listan. Vet ej om det är den snyggaste lösningen dock.

Om du vill kolla om ett element finns i listan innan det läggs till kan du kolla det mha contains().

Det är precis så jag löser det nu. Tänkte om det fanns något bättre / snyggare sätt.
Men det är inte hela värden, det funkar ju trots allt.

Medlem sedan jan. 20023 327 inlägg
#5

dAEk skrev:

Om du vill kolla om ett element finns i listan innan det läggs till kan du kolla det mha contains().

Du skulle kanske med hjälp av contains som dAEk tippsade om, kunna göra en kontroll innan du lägger till element? På så vis eliminerar du dubbletterna att ens uppstå.

if (!myArrayList.contains(myObject)) {
    myArrayList.add(myObject);
}

Men det kanske inte är applicerbart på ditt problem?

Är det så här du gör nu: http://www.devx.com/tips/Tip/20745 ?

Medlem sedan feb. 20041 816 inlägg
#6

Man bör även synchronisera (svengelska) i så fall annars kan man inte lita på att det fungerar.

Ett snyggare sätt vore att inte använda ArrayList öht i detta fall. ;)

Medlem sedan sep. 200642 inlägg
#7

Jag gjorde så att jag använde en HashSet och la till alla element i lisan.

if(temp.add(args.get(k)))

och sedan jämnförde temp med antalet element var i listan.

Tackar för alla tips.

Medlem sedan jan. 20023 327 inlägg
#8

dAEk skrev:

Man bör även synchronisera (svengelska) i så fall annars kan man inte lita på att det fungerar.

Ett snyggare sätt vore att inte använda ArrayList öht i detta fall. ;)

Sant och jag kom på mig själv att man totalt tappar poängen av att använda sig av en ArrayList om man inte tillåter dubbletter. :r

273 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
140 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)