Collection Framework
既にどっかに存在してそうだけど、ちょっと探して見つからなかったので作ってみた。
やりたいことは、配列内の重複データのみをエラーとすること。下のmainでやってること。
だれか間違いや効率的な記述があれば指摘してちょうだい。
#復帰値はHashSet,ArrayListになってる。
package util; import java.util.*; /** * @author chigurihaguri * @version 0.1 2005/07/10 chigurihaguri */ public class UtilCollection { /** * リストの重複データをセットで返す。 */ public static Set duplicateSet(final List list) { final Set set = new HashSet(); final Set duplicateSet = new HashSet(); final Iterator itr = list.iterator(); while (itr.hasNext()) { Object o = itr.next(); if (set.add(o) == false) { duplicateSet.add(o); } } return duplicateSet; } /** * 配列の重複データをセットで返す。 */ public static Set duplicateSet(final Object[] src) { return duplicateSet(Arrays.asList(src)); } /** * リストの重複データをリストで返す。 */ public static List duplicateList(final List list) { final List list2 = new ArrayList(); list2.addAll(duplicateSet(list)); return list2; } /** * 配列の重複データをリストで返す。 */ public static List duplicateList(final Object[] src) { final List list = new ArrayList(); list.addAll(duplicateSet(Arrays.asList(src))); return list; } /** * リストの重複データを配列で返す。 */ public static Object[] duplicateArray(final List list) { return duplicateSet(list).toArray(); } /** * 配列の重複データを配列で返す。 */ public static Object[] duplicateArray(final Object[] src) { return duplicateSet(src).toArray(); } /** * セルフテスト。 */ public static void main(String[] args) { Object[] from = args; Set errors = UtilCollection.duplicateSet(from); for (int i = 0; i < from.length; i++) { if (errors.contains(from[i])) { System.out.println("duplicate data(" + (i + 1) + ")->" + from[i]); } } } }