2013年7月3日

[JAVA]ArrayList < Custom Object >,使用 indexOf 的方法。 (Override equals)

在 JAVA 的 ArrayList 中,indexOf 實在是非常便利的 method。

但是,如果放在 ArrayList 的 Element Object 不是 String、Integer 之類的的話。

想使用 indexOf,就必須 Override 該 Element Object 的 equals!


因為,在 ArrayList 的 indexOf 中,

用來比對物件是否等值的方法其實就是呼叫 Element Object 裡面的 equals。


以下範例:

//-------------------------------------------------------------------
import java.util.ArrayList;

public class test {

    public static void main(String[] args) {

        // 自訂的 Element Object。
        class Data_Cell
        {
            public int Data_1;
            public int Data_2;
   
            Data_Cell(int D1 , int D2)
            {
                Data_1 = D1;
                Data_2 = D2;
            }
   
            // 這裡要 Override 原本的 equals,好讓 indexOf 可以拿來用。
            @Override 
            public boolean equals(Object o)
            {
                Data_Cell t = (Data_Cell) o;
    
                if( !(Data_1 == t.Data_1 && Data_2 == t.Data_2) )
                    return false;
                else
                    return true;
            }
        }
  
        // 宣告 ArrayList。
        ArrayList <Data_Cell> Data = new ArrayList <Data_Cell> ();
  
        // 加入一些測試用的資料給 ArrayList。
        Data.add(new Data_Cell(1 , 2));
        Data.add(new Data_Cell(3 , 4));
        Data.add(new Data_Cell(5 , 6));
  
  
        // 想搜尋的物件
        Data_Cell temp_Cell = new Data_Cell(3 , 4);
  

        // 使用 indexOf 搜尋。
        int Add_Index = Data.indexOf(temp_Cell);
  
        // 顯示出結果。
        System.out.print(Add_Index + "\n");
  
        return;
    }

}
//-------------------------------------------------------------------

結果會印出 1 !

沒有留言:

張貼留言