• ベストアンサー

java 一意の値を取り出す方法

初心者ですが、どうぞ宜しくお願いいたします。 ご指南願いたいのは、ArrayListに格納されているデータの中から、 一意のデータのみ別のArrayListに入れていきたいのです。 ArrayList1  →  ArrayList2 100点        100点 80点          80点  80点          90点 80点          70点  100点 100点 90点 70点 90点 90点 上記のように重複したデータは切り捨てたいのですがよい方法はないでしょうか? 宜しくお願いいたします!

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

あまり実行効率は良くないですが、一度Setにコピーするのが手っ取り早いかと。 例) ------------------------------------ List<String> source = new ArrayList<String>(); source.add("100点"); source.add("80点"); source.add("80点"); source.add("80点"); source.add("100点"); source.add("100点"); source.add("90点"); source.add("70点"); source.add("90点"); source.add("90点"); List<String> result = new ArrayList<String>(new HashSet<String>(source)); ---------------------------------------- 順番を保持したいなら LinkedHashSet を使えば良いです。 http://java.sun.com/javase/ja/6/docs/ja/api/java/util/LinkedHashSet.html

参考URL:
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/HashSet.html
tokyo2199
質問者

お礼

ありがとうございます。 大変参考になりました。 himajin100000さん、alice_asahinaさん同様に思った通りになりました。 初心者の私には一番わかりやすく、 取り組みやすかったのでベスタアンサーとさせてもらいました。 またわからないときは宜しくお願いします。

その他の回答 (2)

noname#147388
noname#147388
回答No.3

前述の2つはデータの要領によって OutOfMemory 発生しやすいよそれ。 基本はこの形で判定するほうが早いし無駄なメモリもくわない。 public static <T> List<T> unique(List<T> arg0) {  List<T> ret = new ArrayList<T>();  for (int i = 0; i < arg0.size(); i++) {   T x = arg0.get(i);   if (!ret.contains(x)) {    ret.add(x);   }  }  return ret; }

tokyo2199
質問者

お礼

ありがとうございます。 大変良い勉強材料になりました。 わたしにはまだ高度に感じますが、 こんなに無駄なくコードは記述できるんですね。 驚きました! 本当にありがとうございました。

回答No.1

関連するQ&A

専門家に質問してみよう