02_List Set Map contains 메소드 호출

1937 단어 contains
집합List SetMap은 그 방법인contains를 호출할 때 어떤 요소를 포함하는지 자동으로 대상의 equals 방법을 호출합니다.Array List는 대상의 equals만 덮어쓰면 됩니다. 그러나 SetMap에 대해서는 대상의hashCode를 덮어써야 합니다. 그렇지 않으면 예상한 결과를 얻지 못합니다.
 
테스트 코드:
public class Name {

	private String firstName;
	private String lastName;
	
	public Name(String firstName, String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}

	@Override
	public boolean equals(Object obj) {
		Name name = (Name)obj;
System.out.println(name.firstName.equals(firstName)&&name.lastName.equals(lastName));	
		return name.firstName.equals(firstName)&&name.lastName.equals(lastName);
	}
	
	@Override
	public int hashCode() {
		return firstName.hashCode()*lastName.hashCode();
	}

}

 
public class TestContains {

	static void testHashSet(){
		Set s = new HashSet();
		Name name = new Name("hello","world");
		s.add(name);
		System.out.println(s.contains(new Name("hello","world")));
		//System.out.println(s.contains(name));
	}
	
	static void testHashMap(){
		Map map = new HashMap();
		Name name = new Name("hello","world");
		map.put(name, name);
		System.out.println(map.containsKey( new Name("hello","world")));
	}
	
	static void testArrayList(){
		List list = new ArrayList();
		Name name = new Name("hello","world");
		list.add(name);
		System.out.println(list.contains(new Name("hello","world")));
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		testArrayList();
		testHashSet();
		testHashMap();
	}

}

좋은 웹페이지 즐겨찾기