質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

555閲覧

Javaでリストに2つの変数を格納している時の検索方法

aiueoaiueoaiue

総合スコア94

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/11/03 14:04

編集2018/11/03 15:26

###前提・実現したい事
[0 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6, 7 7, 8 8, 9 9]
上記のようなリストがあったとしてこのようなリストの要素をindexOfメソッドを使って要素検索するにはどのようにすればよいのでしょうか?今のところ色々試しているのですが全て-1が返されてしまいます。
上のリストは全てint型の整数が格納されているという体です。1番目に(0 0)という2つの整数が入っており、2番目に(1 1)という整数が入っているという例です。
###試したこと

Java

1System.out.println(list.indexOf(0 0));//試したこと1つ目 2System.out.println(list.indexOf("0 0"));//試したこと2つ目 3System.out.println(list.indexOf(new Eex(0, 0)));//試したこと3つ目

###補足
関連する質問
試したこと3つ目は上のURLに関連してます。
###クラスのオーバーライド追記

Java

1class Eex { 2 public int A; 3 public int B; 4 public Eex(int a, int b){ 5 A = a; 6 B = b; 7 } 8 @Override 9 public String toString() { 10 return String.format("%d %d", A, B); 11 } 12 @Override 13 public boolean equals(Object obj) { 14 if (this == obj)return true; 15 if (obj == null)return false; 16 if (!(obj instanceof Eex))return false; 17 Eex other = (Eex) obj; 18 return this.A == other.A && this.B == other.B; 19 } 20 21 @Override 22 public int hashCode() { 23 return Objects.hash(A, B); } 24} 25

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、List#indexOfについて調べます。

int indexOf​(Object o)

指定された要素がこのリスト内で最初に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1を返します。 より正式には、Objects.equals(o, get(i))のような最も低いインデックスi、またはそのようなインデックスがない場合は -1を返します。

次に、Objects.equalsについて調べます。

public static boolean equals​(Object a, Object b)

引数が相互に等しい場合はtrueを返し、それ以外の場合はfalseを返します。 したがって、両方の引数がnullの場合はtrueが返され、1つの引数だけがnullの場合は falseが返されます。 それ以外の場合は、最初の引数のequalsメソッドを使用して等しいかどうかが判定されます。

結局、リストの要素に適切にequalsが実装されていれば良いことが分かります。


Java

class Eex {
public int A;
public int B;
public Eex(int a, int b){
A = a;
B = b;
}
}

Eexクラスにメソッドequalsを用意してあげましょう。
Google - Java equals オーバーライド

質問追記を受けて

まず、equalsの実装から。
プリミティブ型はnull値を持つことは無いので、単に各要素を比較すれば良いです。

Java

1class Eex { 2 ... 3 @Override 4 public boolean equals(Object obj) { 5 if (this == obj)return true; 6 if (obj == null)return false; 7 if (!(obj instanceof Eex))return false; 8 Eex other = (Eex) obj; 9 10 return this.A == other.A && this.B == other.B; 11 } 12}

また、Java7で追加されたObjects.hashを用いればhashCodeもシンプルに実装できます。

Java

1@Override 2public int hashCode() { 3 return Objects.hash(A, B); 4}

投稿2018/11/03 14:12

編集2018/11/03 15:16
LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/11/03 15:17

回答に追記しました。
aiueoaiueoaiue

2018/11/03 15:26

大変助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問