なんで-1がかえってくるの!?と小一時間悩んでようやく解決しました
自分が書いたコードは下記
例えばDataクラスに実データが格納されて、TestクラスにDataクラスのArrayListを持つ場合。
そしてmainクラスからobjをTestクラスのArrayListにaddしてArrayListのindexが欲しい場合。
public class Data { private String data1; private String data2; // omitted // コンストラクタはdata1,2の両方とdata1のみを定義する // getterはそれぞれ定義 }
public class Test{ private ArrayList<Data> arrayData = new ArrayList<Data>(); // omitted public void addData(Data dataObj) { arrayData.add(dataObj); } public int returnIndex(Data dataObj) { return this.arrayData.indexOf(dataObj); } //omitted }
public class void main(String[] args) { Test theTest = new Test(); //omitted String test1 = "aaa"; String test2 = "bbb"; Data dataA = new Data(test1, test2); addData(dataA); String data1 = "aaa"; Data dataB = new Data(data1); int i = returnIndex(dataB); System.out.println(i); //omitted }
上記じゃi
は-1しか返って来ません、、、
これは完全一致するobjがないので(dataBはdata1しかデータを作っていないので)-1しか返って来ません
解決策
こんな場合でもなんとかしてindexを返す方法は下記にTestクラスのreturnIndex
メソッドを変更
public class Test{ private ArrayList<Data> arrayData = new ArrayList<Data>(); // omitted public void addData(Data dataObj) { arrayData.add(dataObj); } public int returnIndex(Data dataObj) { // return this.arrayData.indexOf(dataObj); return arrayData.getData1().equals(dataObj.getData1());
なんかクソややこしくなったのですがここまでやれば-1以外が返りました。
obj同士の正しいメンバ同士で比較させてあげればいいっぽいですね...
片方はメンバ2つあって片方はメンバ1つしか値がセットされていないとindexOf
は-1を返すということが学べました。