Java工具类--Set集合(一)

Personnel类:
public class Personnel {

	private String name;
	private int age;
	public Personnel() {
		
	}
	public Personnel(String name,int age){
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		
		this.age = age;
	}

	@Override
	public String toString() {
		return this.getName()+":"+this.getAge();
	}

	//覆写hashCode算法
	public int hashCode() {
		return name.hashCode()+age*77;
	}

	//覆写equals算法
	public boolean equals(Object obj) {
		if(this == obj) return true;
		Personnel  p = (Personnel)obj;
		return p.getName().equals(name) && age == p.getAge();
	} 
}
/**
 * hashCode算法中用的是Object对象equals方法,所以要覆写equals方法
 */

HashSet类:

/**
 * Set集合和Collection 接口中方法是一样
 *   Set:
 *     |--HashSet 哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;
 *     			      特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
 *     |--TreeSet 使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
 *
 */
public class SetDemo {
	public static void main(String[] args) {
		HashSet<String> hs = new HashSet<>();
		HashSet<Personnel> hp = new HashSet<>();

		fonctions(hs);
		System.out.println();
		fonctionp(hp);
	}

	private static void fonctions(HashSet<String> hs) {
		//添加数据
		hs.add("方明");
		hs.add("张鹏");
		hs.add("小芳");
		hs.add("阿莉");
		System.out.println("打印对象数据源:"+hs);

		//包含元素
		System.out.println("是否包含小芳:"+hs.contains("小芳"));

		//不包含任何元素
		System.out.println("是否为空集合:"+hs.isEmpty());

		//删除指定元素
		System.out.println("是删除小芳:"+hs.remove("小芳"));

		System.out.println("打印对象操作后数据源:"+hs);

		//迭代器和Collection 是相同的
	}

	private static void fonctionp(HashSet<Personnel> hp) {
		//添加对象
		Personnel p = new Personnel("xiaofang",18);
		Personnel pr = new Personnel("zhangsan",10);
		hp.add(new Personnel("lisi",20));
		//添加两次
		hp.add(new Personnel("lisi",20));
		hp.add(new Personnel("wangwu",30));
		hp.add(p);
		
		hp.add(pr);

		System.out.println("打印对象数据源:"+hp);
		//包含元素
		System.out.println("是否包含对象p:"+hp.contains(p));

		//不包含任何元素
		System.out.println("是否为空集合:"+hp.isEmpty());

		//删除指定元素
		System.out.println("是删除pr:"+hp.remove(pr));

		System.out.println("打印对象操作后数据源:"+hp);
	}
}
/**
 * 注意:
 * 1.HashSet集合是基于哈希表结构。
 * 2.HashSet存储方式是通过哈希算法存储。
 * 3.如果需要按照指定内容排序和唯一性,需要复写hashCode()和equals()方法
 */
运行结果:
打印对象数据源:[张鹏, 阿莉, 方明, 小芳]
是否包含小芳:true
是否为空集合:false
是删除小芳:true
打印对象操作后数据源:[张鹏, 阿莉, 方明]

打印对象数据源:[xiaofang:18, lisi:20, zhangsan:10, wangwu:30]
是否包含对象p:true
是否为空集合:false
是删除pr:true
打印对象操作后数据源:[xiaofang:18, lisi:20, wangwu:30]
Api参考:
方法摘要
 boolean add(E e) 
          如果此 set 中尚未包含指定元素,则添加指定元素。
 void clear() 
          从此 set 中移除所有元素。
 Object clone() 
          返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。
 boolean contains(Object o) 
          如果此 set 包含指定元素,则返回 true
 boolean isEmpty() 
          如果此 set 不包含任何元素,则返回 true
 Iterator<E> iterator() 
          返回对此 set 中元素进行迭代的迭代器。
 boolean remove(Object o) 
          如果指定元素存在于此 set 中,则将其移除。
 int size() 
          返回此 set 中的元素的数量(set 的容量)。

猜你喜欢

转载自blog.csdn.net/u013251413/article/details/80678008