オブジェクト(id、name)を含む配列リストが1つあります。リスト内の名前が重複している場合は削除する必要があります
名前が繰り返される場合は、一度だけ名前を印刷する必要があります
リストにエントリを重複させたくない場合は、SET を使用します。
注:オブジェクト(ID、名前)のequalsとhashcodeをオーバーライドする必要があります。そうしないと、SETに重複したオブジェクトが見つかります
適切なコンパレータを実装して、データ構造を設定します。ループを実行し、オブジェクトをそのセットに入れます。このセットを印刷します。
public static boolean checkDuplicate(ArrayList list) {
HashSet set = new HashSet();
for (int i = 0; i < list.size(); i++) {
boolean val = set.add(list.get(i));
if (val == false) {
return val;
}
}
return true;
}
Arraylist は、イテレータによって返された最後の要素をリスト自体から削除できるイテレータを提供します。そのため、すでに見た名前を追跡するだけです。Set
実装は役に立ちます。
Set<String> names = new HashSet<>();
Iterator<MyType> it = getListFromSomewhere().iterator(); // you know how
while(it.hasNext()) {
if (!names.add(it.next().getName()) {
it.remove();
}
}
ヒント: 値が既にセット内にある場合、セットに追加すると false が返されます。
備考
あなたの要件はそれほど明確ではありませんでした: ここでは、最初のエントリに名前を付けて保持し、それ以降のすべてのエントリをリストから削除します。リストが ID でソートされていない場合、リストはかなりランダムになり、どのエントリが保持され、どのエントリが削除されます。
java.util.Set
代わりにaを使用してください。重複を含めることはできません。
参照: http://docs.oracle.com/javase/6/docs/api/java/util/Set.html
Set<String> myNames = new HashSet<String>();
myNames.add("JAMES");
myNames.add("ELLA");
myNames.add("JAMES");
myNames.size() // will return 2
SetファミリーとListファミリーの助けを借りてそれを行うことができます
Setファミリを使用して重複を削除する方法を見てきました。リストファミリーの助けを借りてそれを行うこともできます. 以下のコードを参照してください。
package com.rais.util;
import java.util.ArrayList;
import java.util.List;
/**
* @author Rais.Alam
* @project Utils
* @date Dec 18, 2012
*/
public class ConverterUtil
{
/**
* @param args
*/
public static void main(String[] args)
{
List<String> original = new ArrayList<String>();
original.add("Tomcat");
original.add("Jboss");
original.add("GlassFish");
original.add("Weblogic");
original.add("Tomcat");
List<String> newList = removeDuplicates(original);
for (String value : newList)
{
System.out.println(value);
}
}
public static List<String> removeDuplicates(List<String> original)
{
List<String> tempList = new ArrayList<String>();
for (String value : original)
{
if (!tempList.contains(value))
{
tempList.add(value);
}
}
return tempList;
}
}