山西建设机械网站首页,学生做的网站,网站开发工程师课程,自贡建设监督质量网站Set接口#xff0c;它里面的集合#xff0c;所存储的元素就是不重复的。 HashSet集合#xff0c;采用哈希表结构存储数据#xff0c;保证元素唯一性的方式依赖于#xff1a;hashCode()与equals()方法。 保证HashSet集合元素的唯一#xff0c;其实就是根据对象的hashCode和…Set接口它里面的集合所存储的元素就是不重复的。 HashSet集合采用哈希表结构存储数据保证元素唯一性的方式依赖于hashCode()与equals()方法。 保证HashSet集合元素的唯一其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象那么保证其唯一就必须复写hashCode和equals方法建立属于当前对象的比较方式。 给HashSet中存储JavaAPI中提供的类型元素时不需要重写元素的hashCode和equals方法因为这两个方法在JavaAPI的每个类中已经重写完毕如String类、Integer类等。 创建HashSet集合存储String对象。 package com.oracle.www.demo03;
import java.util.HashSet;import javax.swing.plaf.synth.SynthSeparatorUI;
public class Demo03 {public static void main(String[] args) { //获得Object对象输出Object的hashCode算法Object obj new Object();System.out.println(obj.hashCode()); //创建Hash对象HashSetString set new HashSetString();set.add(abc);set.add(bcd);set.add(ghj);set.add(abc);//遍历集合for(String s:set) {System.out.println(s);System.out.println(s.hashCode());}}} 输出结果如下说明集合中不能存储重复元素 370988149bcd97347abc96354ghj102313 HashSet存储自定义类型元素 给HashSet中存放自定义类型元素时需要重写对象中的hashCode和equals方法建立自己的比较方式才能保证HashSet集合中的对象唯一。 自定义Student类 public class Student {private String name;private int age;public Student(String name, int age) {super();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;}Overridepublic String toString() {return Student [name name , age age ];}Overridepublic int hashCode() {final int prime 31;int result 1;result prime * result age;result prime * result ((name null) ? 0 : name.hashCode());return result;}Overridepublic boolean equals(Object obj) {if (this obj)return true;if(!(obj instanceof Student)){System.out.println(类型错误);return false;}Student other (Student) obj;return this.age other.age this.name.equals(other.name);}
} 创建HashSet集合存储Student对象。 public class HashSetDemo {public static void main(String[] args) {//创建HashSet对象HashSet hs new HashSet();//给集合中添加自定义对象hs.add(new Student(zhangsan,21));hs.add(new Student(lisi,22));hs.add(new Student(wangwu,23));hs.add(new Student(zhangsan,21));//取出集合中的每个元素Iterator it hs.iterator();while(it.hasNext()){Student s (Student)it.next();System.out.println(s);}}
} 输出结果如下说明集合中不能存储重复元素 Student [namelisi, age22] Student [namezhangsan, age21] Student [namewangwu, age23] 在HashSet下面有一个子类LinkedHashSet它是链表和哈希表组合的一个数据存储结构。LinkedHashSet为双链接结构所以能保证唯一性和有序存储。 package com.cracle.www.demo01;import java.util.HashSet;
import java.util.LinkedHashSet;public class Demo01 {public static void main(String[] args) {//LinkedHashSet不能存重复元素但是是有序的是HashSet的子类。LinkedHashSetString has new LinkedHashSetString();has.add(c);has.add(b);has.add(a);for(String a:has) {System.out.println(a);}}} 输出为 cba转载于:https://www.cnblogs.com/time-to-despair/p/9763581.html