Ваши неправильные методы equals()
и hashCode()
. Вы нарушаете договор.
Если я правильно понял, вы хотите, чтобы найти индекс e
хотя есть только в списке c
, и вы хотите сделать это злоупотребление String#equals()
проверки равенства только для первых 5 букв. Таким образом, c.code = 1-202
, e.code = 1-202.0
, делает c.code.equals(e.code.subString(0, e.code.lenght()-2))
должен содержать true
.
Это правильная реализация:
public class OPCode {
public String code;
public OPCode(String code){
this.code = code;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((code == null) ? 0 : code.split("\\.")[0].hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
OPCode other = (OPCode) obj;
if (code == null) {
if (other.code != null)
return false;
} else{
String thisCode = code.split("\\.")[0];
String otherCode = other.code.split("\\.")[0];
if (!thisCode.equals(otherCode))
return false;
}
return true;
}
}
Обратите внимание, что я использовал метод String#split
поскольку (и это мое предположение), вы хотите быть одинаковые коды с той же числовой части без учета дробной части. Используя split
, мы избегаем управления переменным числом литералов.
испытание его:
ArrayList<OPCode> t_codes = new ArrayList<OPCode>();
OPCode c = new OPCode("1-202");
t_codes.add(c);
OPCode e = new OPCode("1-202.0");
System.out.println(t_codes.indexOf(e)); // -1 <-- Problem here now gives 0
System.out.println(t_codes.indexOf(c));
КСТАТИ Я создал как метод, используя затмение встроенного функции через Source> Создать хэш-код() и Equals() ... и модифицированные для выполнения этой задачи.
возможно дубликат [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Joe
так, как я видеть это. Вам эфир нужно переопределить equals на OPCode или использовать объект-оболочку, у которого есть метод переопределенных равных – AppX
, очевидно, не дубликат того, как сравнивать строки. – kai