我遇到問題,使用.contains檢查字符串是否存儲在HashSet中。HashSet <String> .contains()
import java.util.HashSet;
public class Controller
{
private Queue<String> queue;
private HashSet<String> blocked;
public Controller()
{
queue = new Queue<String>();
blocked = new HashSet<String>();
}
public void add(String item)
{
if (!(blocked.contains(item))) queue.add(item);
}
}
我查了一下,明白我需要重寫.equals方法。這是否意味着我必須創建一個擴展HashSet的新類,然後聲明該新類的實例來代替'HashSet blocked''?
我知道只是使用==來比較兩個字符串不起作用的原因,但我很困惑,因爲下面的代碼似乎在某些情況下工作,但不是全部。
任何意見將不勝感激!
問候
該代碼應該工作; 'String'不重寫'equals()'和'hashCode()'。 – SLaks 2012-02-23 04:25:55
什麼情況下不起作用?記住大小寫敏感。 – NightWolf 2012-02-23 04:27:02
我擔心你誤會了。如果你在'HashSet'中使用一個對象,該對象應該有'hashCode'和'equals'方法,而不是'HashSet'本身。由於'String'帶有它自己的'equals'和'hashCode'方法,所以你不應該做額外的工作。你期望代碼做什麼,爲什麼「不起作用」? – Jeffrey 2012-02-23 04:27:40