ListのindexOfの実装は
(o==null ? get(i)==null : o.equals(get(i)))となる、最小のインデックスiを返します。
が基本なので、IntegerのequalsとJisakuがtrueになることは無いので、基本的にはできません。
自前で、以下のようなメソッドを用意するのが妥当かと思います。
java
1private static int mySearch(List<Jisaku> list, int target) {
2 for(int i = 0; i < list.size(); i++) {
3 if (list.get(i).a == target) return i;
4 }
5 return -1;
6}
jisakuList.indexOf(1)でなく、jisakuList.indexOf(new Jisaku(0, "xxx"))みたいな探しかたでよいなら
Jisakuクラスのequalsをオーバーライドすればよいです。
とはいえ、bの値を無視するequalsは微妙かと思います。
java
1public boolean equals(Object o) {
2 // ★重要★ equalsを実装する場合、hashCodeの実装も必要
3 if(o != null && o instanceof Jisaku) {
4 // a が 同じならequal
5 return ((Jisaku)o).a == this.a;
6 }
7 return false;
8}
9
あとは、y_waiwaiさんの回答にあるように、indexOfを実装する方法があります。
java
1public static void main(String[] args) {
2 List<Jisaku> jisakuList = new ArrayList<Jisaku>() {
3 @Override
4 public int indexOf(Object o) {
5 Integer target = null;
6 if (o instanceof Jisaku) {
7 target = ((Jisaku) o).a;
8 } else if (o instanceof Integer) {
9 target = (Integer) o;
10 }
11
12 for (int i = 0; i < size(); i++) {
13 // if (o == null ? get(i) == null : o.equals(get(i)))
14 if (o == null ? get(i) == null : get(i).a == target)
15 return i;
16 }
17
18 return -1;
19 }
20 };
21
22 for (int i = 0; i < 3; i++) {
23 Jisaku j = new Jisaku(i, "aaa");
24 jisakuList.add(j);
25 }
26
27 System.out.println(jisakuList.indexOf(new Jisaku(0, "other")));
28 System.out.println(jisakuList.indexOf(2)); // コンパイラが警告だすよ
29
30 jisakuList.add(null);
31 System.out.println(jisakuList.indexOf(null));
32}
33