- PR -

2次元リストの比較がうまくいきません。

1
投稿者投稿内容
なつめやし
会議室デビュー日: 2004/06/30
投稿数: 3
投稿日時: 2004-07-01 18:21
例えば、2次元リストのArrayList A, ArrayList Bがあります。
ArrayList A, ArrayList Bはそれぞれ、エレメントとして、ArrayListを複数持っています。
うまくいかないのは、ArrayList A, ArrayList Bのエレメント同士(ArrayList)を比較してtrueかfalseを結果として返したいのですが、ArrayList A, ArrayList Bに全く同じ値をセットしても常にfalseしか結果として返しません。

うまく比較を行う方法をご存知の方がおられましたらお手数では、御座いますがご教授して頂けますと幸いです。Javaをやり始めて浅いもので、レベルの低い質問ですいません。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-01 18:30
「どのように比較したら」うまくいかないのか、そもそも二つのArrayListがどうだったら
同じと判定したいのか、を明確にしてください。
なつめやし
会議室デビュー日: 2004/06/30
投稿数: 3
投稿日時: 2004-07-01 18:43
早速のご返答有難う御座いました。

@ArrayList A, ArrayList Bから、getメソッドで、それぞれの1つ目のエレメント(ArrayList)を取得しました。ここでは、tmp1、tmp2とします。
A比較方法は、equalsメソッド、==、の両方で比較しました。
 
 boolean ans = tmp1.equals(tmp2);
 boolean ans = tmp1 == tmp2;

※tmp1,tmp2のArrayListの中身(エレメント←これは、ArrayListではない)が、同じであればtrueを返したいと考えております。うまく説明ができませんですいません。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-07-01 18:48
1.tmp1,tmp2の中身のオブジェクトは、equals で比較してtrueを返すことを確認されましたか?
2.listのequalsは、「順番まで含めて完全に一致してる場合」にtrueを返しますが、そこまで完全に一致していますか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-01 18:59
とりあえず、
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/AbstractList.html#equals(java.lang.Object)
をよーく読んでください。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-07-01 19:01
同等性(同じ参照なのか)を見たいのですか、同値性(参照は違うかもしれないが、同じ値なのか)を見たいのですか?

同等性なら == 演算子で比較します。
同値性なら一つずつ、フィールドを比較するか、またはEqualsをオーバーライドします。
フィールドも何かの参照なら、Equalsなどで同等性をチェックする必要があります。
もしくは、ソート目的なら、Comparatorを作成するか、要素にComparableを実装させます。

ちなみに、Equalsの実装は思った以上に奥が深いです。
実装する前に一度、Effective Java(書籍)を一読することをお勧めします。
1

スキルアップ/キャリアアップ(JOB@IT)