2つのListオブジェクトを比較して、
それぞれの要素に格納されているクラスの属性が
一致しているかどうか、また、格納されている順番が同じかどうかを
調べたいのですが・・。
例えば、以下のようなかんじです↓
1. 比較するListオブジェクト(1):userList
//Userオブジェクト生成
User user1 = new User();
user1.setUserID(2);
User user2 = new User();
user2.setUserID(4);
//UserオブジェクトをListに格納
List userList = new ArrayList();
userList.add(user1);
userList.add(user2);
2. 比較するListオブジェクト(2):specialUserList
※1.と同じ要領で生成されたもの
List specialUserList;
3. 1と2を比較する
比較内容は以下の通りです。
1のListオブジェクト(userList)は、
1番目の要素に、 UserID:2 を持つUserオブジェクト
2番目の要素 に、UserID:4 を持つUserオブジェクト
が格納されていますが、
2のListオブジェクト(specialUserList)も、
これと同じ構成で格納されているかどうか調べたいのです。
例えば、
2のListオブジェクトも、
1番目の要素に、 UserID:2 を持つUserオブジェクト
2番目の要素 に、UserID:4 を持つUserオブジェクト
が格納されていればOKとし、上記以外であれば、NGとします。
例えば、以下のような内容がNGです。
1番目の要素に、 UserID:1(※2以外) を持つUserオブジェクト
2番目の要素 に、UserID:8(※4以外)を持つUserオブジェクト
つまり、List要素に格納されている内容と、その格納されている順番が、
1と2で同じかどうかを調べたいのです。
もし分かる方いましたら、お力をお貸しください・・・
No.1ベストアンサー
- 回答日時:
うーん、、、何か引っかかるような類いの処理では
ないような気がするのですが。
class User{
int userID;
public void setUserID(int i) {
this.userID=i;
}
public int getUserID(){
retrun this.userID;
}
}
上の様に、getUserID() メソッドを作ってしまえば良い
だけなのではないでしょうか?
後は、java.util.List#get() で Object を取得して、
User クラスにキャストして、getUserID() で値を取り、
比較して、、、って事ではないかと。
No.4
- 回答日時:
#2です。
#3の方がおっしゃるとおりですね。
そのほうがかっちょいいプログラムですね。
要件を満たしていますし。
ただUserというクラスの性質上普通にequalsでも大丈夫じゃないのかなぁと思った次第です。
userId:Userクラスのインスタンス=1:1でしょうし。。。
No.3
- 回答日時:
#2>そのまま.equalsできけば???
そりゃー違うでしょ?
と、最初は思ったのですが(笑)「そのまま」というのを省けば素晴らしい回答であるという事に気付きました。
「そのまま」であるのならば、User クラスの equals() メソッドの実装次第ということになります(ArrayList の equals() は内部で要素の equals() を呼び出している)
ですから、もし、Object クラスの equals() の実装を引き継いでいるのならば「参照先」が「等しい」かどうかになりますから、userID の値がどうであれ「等しくない」という結果になってしまいます。
けれど、User クラスの equals() をオーバーライドする事で、ArrayList の equals() を有効活用できるようになります(ArrayList の equals() では、要素格納順に要素の equalse() を呼び出し判定してくれる)
という事で、User クラスの equals() をオーバーライドしてしまいましょう。
class User {
int userID;
public void setUserID(int num){
this.userID=num;
}
public int getUserID(){
return this.userID;
}
//ここをオーバーライド
public boolean equals(Object obj){
if(obj!=null && obj instanceof User){
return getUserID()==((User)obj).getUserID();
}
return false;
}
}
以上の記述を加える事で、ArrayList の equals() で希望の比較が出来るようになったと思います。
User user1 = new User();
user1.setUserID(2);
User user2 = new User();
user2.setUserID(4);
List userList=new ArrayList();
userList.add(user1);
userList.add(user2);
User user3 = new User();
user3.setUserID(2);
User user4 = new User();
user4.setUserID(4);
List specialUserList=new ArrayList();
specialUserList.add(user3);
specialUserList.add(user4);
System.out.println("判定:"+userList.equals(specialUserList));
//実行結果
判定:true
以上です。我ながら、これはなかなか「綺麗な実装」だと思います。どうぞご活用を(笑)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
newは明示的にした方が良いのか?
-
C#でフォームのオブジェクト名...
-
オブジェクトレベルとメタレベル
-
VBAのWindowオブジェクトとWork...
-
エクセルでオブジェクト内の文...
-
Vbで通常使用するプリンターを...
-
.NETのSortedListを多用した時...
-
Excel VBA : イコールになら...
-
VBA 同じ名前のオブジェクトを...
-
COMコンポーネントって何?
-
ビジュアルC++でボタンの有...
-
VBからBATファイルを起動して戻...
-
複数プロジェクト間での値渡し
-
ワイルドカード<?>と型パラメー...
-
Hyperlink.Followはブラウザを指定
-
Strutsのbeanタグについて
-
【Java】入力した西暦→和暦に変...
-
オブジェクト名をforループ内で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
VBA 同じ名前のオブジェクトを...
-
Excelで =EMBED("Acrobat Docu...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
EXCEL VBAにて動的にCheckBOXを...
-
時間帯判定をする。
-
ビジュアルC++でボタンの有...
-
COMコンポーネントって何?
-
Object型からDouble型へのキャスト
-
error C2712: オブジェクト ア...
-
LISTBOXの内容が更新されま...
-
ワイルドカード<?>と型パラメー...
-
戻り値がクラスオブジェクト
-
bmp画像をjpegやpng画像に圧縮...
-
VBAからノーツを起動
-
Accessの連結・非連結オブジェ...
-
ワードで画像をドロップすると...
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
おすすめ情報