独自クラスをVectorに格納してindexOfで検索する方法
ewuals(myclass)、ewuals(int)とhash()を実装した、自分で作成したクラスがあります。
そのクラスをVectorに格納して、indexOf()やlastIndeOf()で検索しようとしていますが、-1が返されます。
for()ループとequals()を使用して自分で検索すると、意図した値が帰ってくるのですが。どこがいけないのでしょうか?
===>java -version
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
import java.util.Vector;
===>type equaltest.java
class equaltest {
public static void main(String args[]) {
myclass myc[] = new myclass[8];
myc[0] = new myclass(false, 10 , 3);
myc[1] = new myclass(false, 10 , 4);
myc[2] = new myclass(false, 20 , 3);
myc[3] = new myclass(false, 20 , 4);
myc[4] = new myclass(true, 10 , 3);
myc[5] = new myclass(true, 10 , 4);
myc[6] = new myclass(true, 20 , 3);
myc[7] = new myclass(true, 20 , 4);
//Vectorに追加
Vector<myclass> myVec = new Vector<myclass>();
for (int lp1 = 0; lp1<myc.length;lp1++){
myVec.add(myc[lp1]);
}
//Vectorの中身を表示
System.out.println(myVec.toString());
System.out.println("------------");
System.out.println("Vector.indexOfの返す値は・・・");
System.out.println("10\t:"+myVec.indexOf(10));
System.out.println("20\t:"+myVec.indexOf(20));
System.out.println("3\t:"+myVec.indexOf(3));
System.out.println("4\t:"+myVec.indexOf(4));
myclass mytmp = new myclass(true, 20 , 4);
//mytmpの中身を表示
System.out.println(mytmp.toString());
System.out.println("mytmp\t:"+myVec.indexOf(mytmp));
System.out.println("自分でequals比較すると・・・");
System.out.println("mytmp?2\t:"+mytmp.equals(myc[2]));
System.out.println("mytmp?3\t:"+mytmp.equals(myc[3]));
System.out.println("mytmp?4\t:"+mytmp.equals(myc[4]));
System.out.println("mytmp(10):"+mytmp.equals(10));
System.out.println("mytmp(20):"+mytmp.equals(20));
System.out.print("自分でVectorを検索すると・・・[");
for (int lp1 = 0; lp1<=myVec.size();lp1++){
if(lp1 == myVec.size()){
System.out.println("-1(not found)]");
break;
}
if(mytmp.equals((myclass)(myVec.elementAt(lp1))) == true){
System.out.println("" + lp1 + "]");
break;
}
}
}
}
===>type myclass.java
public class myclass{
boolean flg;
int valurT;
int valurF;
//
myclass(){
flg = false;
valurT = 20;
valurF = 5;
}
myclass(boolean af, int avalurT, int avalurF){
flg = af;
valurT = avalurT;
valurF = avalurF;
}
//
public boolean equals(int myArg){
if(flg){
return (valurT == myArg);
}else{
return (valurF == myArg);
}
}
//
public boolean equals(myclass argmycls){
if(flg){
return (valurT == argmycls.valurT);
}else{
return (valurF == argmycls.valurF);
}
}
public String toString(){
return "[flg:"+flg+" valurT:"+valurT+" valurF:"+valurF+"]";
}
public int hashCode(){
if(flg){
return (valurT);
}else{
return (valurF);
}
}
}
お礼
ありがとうございます。解決しました。