文字列のリストを入力として受け取るクラスを作成したいと思います。送信された文字列のリストが順序に関係なく等しい場合にこのクラスが常にtrueを返すように、このクラスのハッシュコードとequalsをオーバーライドしたいと思います。
コードは次のとおりです。
public final class TableValues
{
private final String[] tableValue;
TableValues(final String[] values)
{
this.tableValue = values;
}
/**
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(tableValue);
return result;
}
/**
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(final Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final TableValues other = (TableValues) obj;
if (!Arrays.equals(tableValue, other.tableValue))
return false;
return true;
}
}
しかし、私がするとき:
final String[] str1 = {"A", "B", "C"};
final String[] str2 = {"B", "C", "A"};
final TableValues tab1 = new TableValues(str1);
final TableValues tab2 = new TableValues(str2);
if (tab1.equals(tab2))
{
System.out.println("Equal");
}
else
{
System.out.println("Not Equal");
}
常に等しくないを出力します。ここで何が問題になっていますか?