

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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA オブジェクトマクロ 使用指定について お詳しい方教えてください。 共通エクセルフ 2 2023/03/14 17:26
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- PHP クラス 1 2022/08/08 15:12
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- Java どうしてListオブジェクトをIteratorに変換するのですか 1 2022/12/03 17:45
- Visual Basic(VBA) エクセルVBA Workbook変数に変数を使ったファイル名を格納したい 5 2023/06/13 14:46
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- その他(ソフトウェア) Macのミュージックデータの格納先を整理したい 2 2023/04/30 23:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現を使った置換処理。大...
-
VBA 同じ名前のオブジェクトを...
-
C++のシングルトンオブジェクト...
-
javaでは基本型の参照渡しは無...
-
Excelで =EMBED("Acrobat Docu...
-
C#でフォームのオブジェクト名...
-
VBSでのステートメントの末尾が...
-
【Java】入力した西暦→和暦に変...
-
オブジェクト指向プログラミン...
-
VBでExcelオブジェクトを引数を...
-
Object型からDouble型へのキャスト
-
多人数のじゃんけんプログラム
-
サブクラス化
-
Tomcat5.5.17でDataSourceを使...
-
JAVAからHTMLへ値を返す方法
-
Javaの問題なんですが、(this==...
-
プラウザの右端を左へ縮めても...
-
ワイルドカード<?>と型パラメー...
-
MATLABプロットの線にアルファ...
-
インデザインのテキスト回り込み
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
VBA 同じ名前のオブジェクトを...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
ビジュアルC++でボタンの有...
-
COMコンポーネントって何?
-
Object型からDouble型へのキャスト
-
時間帯判定をする。
-
newは明示的にした方が良いのか?
-
戻り値がクラスオブジェクト
-
ワイルドカード<?>と型パラメー...
-
error C2712: オブジェクト ア...
-
Accessの連結・非連結オブジェ...
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
多人数のじゃんけんプログラム
-
Rangeオブジェクトを一時的に作...
-
ワードで画像をドロップすると...
おすすめ情報