- ベストアンサー
JavaのArrayListに要素を追加しながら日付を比較する方法について
- JavaのArrayListに要素を追加しながら、日付を比較する方法を教えてください。
- 具体的には、ValueObjectクラスをArrayListに追加する際に、配列の日付とValueObjectの日付を比較し、一致する場合に特定のフラグをセットし、再度ArrayListに詰め直す必要があります。
- 今のところうまい方法が思い浮かばず困っています。お助け願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こういう感じじゃないですか? public class tttt { static public void main(String[] args){ ArrayList array = new ArrayList(); //20040620から20040629までの+サンプルを作成 for(int i=0; i<9; i++) { ValueObject ov = new ValueObject(); ov.setYMD("2004062"+i); array.add(ov); } String[] strYMDArray ={"20040623","20040626","20040622"}; for(int i=0; i<array.size(); i++) { for(int j=0; j<strYMDArray.length; j++) { if(((ValueObject)array.get(i)).getYMD().equals(strYMDArray[j])) { ((ValueObject)array.get(i)).setFlg(true); } } } for(int i=0; i<array.size(); i++) { System.out.println(((ValueObject)array.get(i)).getYMD()); System.out.println(((ValueObject)array.get(i)).getFlg()); } } } これの何処を悩んでいるんでしょうか?
その他の回答 (2)
- SpiralGalaxy
- ベストアンサー率39% (649/1653)
何がやりたいのかが表現されてないので、よくわかりませんが・・・ ある日付に対応する「フラグのセット」と「フラグの取得」という ことが御希望なんでしょうか? もし、そうだったら Hashtable() 使ってはどうですか? 「比較」も「つめ直し」も「ループ」もいりませんよ。 Hashtable htbl = new Hashtable(); ★フラグセット "20040626", "20040701", "20040801" のフラグをセットする。 htbl.put(new String("20040626"), new Integer(1)); htbl.put(new String("20040701"), new Integer(1)); htbl.put(new String("20040801"), new Integer(1)); その後、また "20040626" というデータが出現しこれもセットしなければならないとしても そのまま htbl.put(new String("20040626"), new Integer(1)); とすれば、上書きされます。 上では Integer を入れてますが何かが入っているかはいってないかを識別するだけのためなので Integer でなくてもいいですし、値もテキトーです。 ★フラグ取得 boolean flg = ((null != (Integer)htbl.get("20040626"))? true; false); または if(null == (Integer)htbl.get("20040626")) { flg = false; } else { flg = true; } そういうことではなくて、「ValueObjectクラス」を配列的に保持しないとならない理由があったとしても htbl.put(new String("20040626"), [ValueObjectクラス] ); としたほうが簡単じゃないですか?
- liar_adan
- ベストアンサー率48% (730/1515)
わからない箇所がいくつかあります。 ・aValとは何か? strYMDとは違うのか? ・再度ArrayListへ詰め直すと言うが、 それはもとのArrayListと同じものか? 違うものか? 同じものの場合は、「詰め直す」ことをしなくても、 単にflgをtrueにするだけでいいのではないか? この処理は、プログラム的には、ループを二重に回すだけです。 外側のループでは、ValueObjectクラスが格納されている ArrayListの全要素を得る。(iteratorを使う方法でも、 size()で得られる回数ループする方法でも、どっちでもよい) 内側のループでは、strYMDArray.lengthだけfor文で ループさせながら文字列比較をすればよい。 普通に考えれば上のようになります。 これよりもうまい方法が必要なのでしょうか? 両方のデータがソートされていることを前提とするなら、 もう少し比較回数を減らす方法はあります。 しかし、流れがかえって煩雑になるし、 動作速度の向上もたいしたことなさそうなので、 普通は二重ループによる方法で十分でしょう。 (両方に1000個以上のデータが入っている…などになるとまた別ですが)