[Java] 容器-01 实现 Comparable 接口 / 重写 equals 与 hashCode (1个图 1个类 3个知识点 6个接口)

import java.util.Collection;
import java.util.HashSet;

public class BasicContainer {
	public static void main(String[] args) {
		Collection c = new HashSet();

		c.add("hello");
		c.add(new Name("f1", "l1"));
		c.add(new Integer(100));

		c.remove("hello");
		c.remove(new Integer(100));

		System.out.println(c.remove(new Name("f1", "l1")));
		System.out.println(c);
	}
}

class Name implements Comparable {
	private String firstName, lastName;

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

	public String getFirstName() {
		return firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public String toString() {
		return firstName + " " + lastName;
	}

	public boolean equals(Object obj) {
		if (obj instanceof Name) {
			Name name = (Name) obj;
			return (firstName.equals(name.firstName))
					&& (lastName.equals(name.lastName));
		}
		return super.equals(obj);
	}

	public int hashCode() {
		return firstName.hashCode(); // 重写 equals 方法必须要重写 hashCode 方法, 当你 Name 类这个对象作为索引,key的时候,就要用到 hashCode
	}

	public int compareTo(Object o) {
		Name n = (Name) o;
		int lastCmp = lastName.compareTo(n.lastName);
		return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
	}

}

posted @ 2013-12-02 20:40  小尼人00  阅读(242)  评论(0编辑  收藏  举报