小言_互联网的博客

java集合之set知识点梳理

270人阅读  评论(0)

2.4.Set
Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素
用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。
对象的相等性
引用到堆上同一个对象的两个引用是相等的。如果对两个引用调用hashCode方法,会得到相同的结果,如果对象所属的类没有覆盖Object的hashCode方法的话,hashCode会返回每个对象特有的序号(java是依据对象的内存地址计算出的此序号),所以两个不同的对象的hashCode值是不可能相等的。
如果想要让两个不同的Person对象视为相等的,就必须覆盖Object继下来的hashCode方法和equals方法,因为Object hashCode方法返回的是该对象的内存地址,所以必须重写hashCode方法,才能保证两个不同的对象具有相同的hashCode,同时也需要两个不同对象比较equals方法会返回true
该集合中没有特有的方法,直接继承自Collection。
—| Itreable 接口 实现该接口可以使用增强for循环
—| Collection 描述所有集合共性的接口
—| List接口 可以有重复元素的集合
—| ArrayList
—| LinkedList
—| Set接口 不可以有重复元素的集合
案例:set集合添加元素并使用迭代器迭代元素。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Demo4 {
public static void main(String[] args) {
//Set 集合存和取的顺序不一致。
Set hs = new HashSet();
hs.add(“世界军事”);
hs.add(“兵器知识”);
hs.add(“舰船知识”);
hs.add(“汉和防务”);
System.out.println(hs);
// [舰船知识, 世界军事, 兵器知识, 汉和防务]
Iterator it = hs.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}

2.4.1.HashSet
—| Itreable 接口 实现该接口可以使用增强for循环
—| Collection 描述所有集合共性的接口
—| List接口 可以有重复元素的集合
—| ArrayList
—| LinkedList
—| Set接口 不可以有重复元素的集合
—| HashSet 线程不安全,存取速度快。底层是以哈希表实现的。

注意:HashSet集合在判断元素是否相同先判断hashCode方法,如果相同才会判断equals。如果不相同,是不会调用equals方法的。

HashSet 和ArrayList集合都有判断元素是否相同的方法,
boolean contains(Object o)
HashSet使用hashCode和equals方法,ArrayList使用了equals方法

练习:使用HashSet存储字符串,并尝试添加重复字符串
回顾String类的equals()、hashCode()两个方法。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Demo4 {
public static void main(String[] args) {
// Set 集合存和取的顺序不一致。
Set hs = new HashSet();
hs.add(“世界军事”);
hs.add(“兵器知识”);
hs.add(“舰船知识”);
hs.add(“汉和防务”);

	// 返回此 set 中的元素的数量
	System.out.println(hs.size()); // 4

	// 如果此 set 尚未包含指定元素,则返回 true
	boolean add = hs.add("世界军事"); // false
	System.out.println(add);

	// 返回此 set 中的元素的数量
	System.out.println(hs.size());// 4
	Iterator it = hs.iterator();
	while (it.hasNext()) {
		System.out.println(it.next());
	}
}

}

  使用HashSet存储自定义对象,并尝试添加重复对象(对象的重复的判定)

package cn.itcast.gz.map;

import java.util.HashSet;
import java.util.Iterator;

public class Demo4 {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add(new Person(“jack”, 20));
hs.add(new Person(“rose”, 20));
hs.add(new Person(“hmm”, 20));
hs.add(new Person(“lilei”, 20));
hs.add(new Person(“jack”, 20));

	Iterator it = hs.iterator();
	while (it.hasNext()) {
		Object next = it.next();
		System.out.println(next);
	}
}

}

class Person {
private String name;
private int age;

Person() {

}

public Person(String name, int age) {

	this.name = name;
	this.age = age;
}

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public int getAge() {
	return age;
}

public void setAge(int age) {
	this.age = age;
}

@Override
public int hashCode() {
	System.out.println("hashCode:" + this.name);
	return this.name.hashCode() + age * 37;
}

@Override
public boolean equals(Object obj) {
	System.out.println(this + "---equals---" + obj);
	if (obj instanceof Person) {
		Person p = (Person) obj;
		return this.name.equals(p.name) && this.age == p.age;
	} else {
		return false;
	}
}

@Override
public String toString() {

	return "Person@name:" + this.name + " age:" + this.age;
}

}


转载:https://blog.csdn.net/eyexin2018/article/details/101306133
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场