문자열이 HashSet에 저장되어 있는지 확인하기 위해 .contains를 사용하는 데 문제가 있습니다.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()'를 오버라이드 (override)합니다. – SLaks
어떤 경우 작동하지 않습니까? 대소 문자를 구분하십시오. – NightWolf
내가 오해 할 것을 두려워합니다. 'HashSet'에서 객체를 사용한다면, 그 객체는'hashCode'와'equals' 메쏘드를 가져야합니다.'HashSet' 자체가 아닙니다. 'String'은 자신의'equals'와'hashCode' 메소드를 가지고 있기 때문에, 여러분이 할 일이 없어야합니다. 그 코드가 무엇을 기대하고 "작동하지 않는"이유가 무엇입니까? – Jeffrey