java集合框架--Set集合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合框架--Set集合相关的知识,希望对你有一定的参考价值。
1.Set集合概述
一个不包含重复元素的集合。
2.代码引入
package com; import java.util.HashSet; import java.util.Set; /** * Collection * List 有序(存储顺序和取出顺序一致),可重复 * Set 无序(存储顺序和取出顺序不一致),唯一 * 虽然Set集合的元素无序,但是,作为集合来说,它肯定有自己的存储顺序, * 我们存储元素的时候可能和它内存的存储元素顺序相同。 * * HashSet:它不保障Set的迭代器顺序,特别是它不保证顺序恒久不变。 */ public class SetDemo { public static void main(String[] args) { //创建集合对象 Set<String> set = new HashSet<String>(); //添加元素 set.add("hello"); set.add("world"); set.add("world"); set.add("java"); set.add("java"); //遍历集合元素 for(String str : set){ System.out.println(str); } } }
3.HashSet类概述
HashSet类不保证Set的迭代顺序。
特别是它不保证该顺序恒久不变。
HashSet如何保证元素的唯一性?
底层数据结构是哈希表。
哈希表依赖于哈希值存储。
package com; import java.util.HashSet; import java.util.Set; /** * HashSet:存储字符串并遍历 * 问题:为什么存储字符串的时候,字符串内容相同的只存储了一个呢? * 通过查看add方法,我们知道这个方法的底层依赖两个方法:hashCode()和equals() * 步骤: * 首先比较哈希值 * 如果相同,继续下一步,比较地址值或者走equals() * 如果不同,就直接添加到集合中 * * 如果类没有重写这两个方法,默认使用的是Object()方法。 * 而String类重写了hashCode()和equals()方法。所以,它就可以把内容相同的字符串去掉,只留下一个。 */ public class SetDemo { public static void main(String[] args) { //创建集合对象 Set<String> set = new HashSet<String>(); //添加元素 set.add("hello"); set.add("world"); set.add("java"); set.add("world"); //遍历集合元素 for(String str : set){ System.out.println(str); } } }
4.存储自定义对象
package com; public class Student { private String name; private int age; public Student(){} public Student(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() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } } package com; import java.util.HashSet; import java.util.Set; /** * 需求:存储自定义对象,并保存元素的唯一性。 * 要求:如果两个对象的成员变量值都相同,则为同一个元素。 * */ public class SetDemo2 { public static void main(String[] args) { //定义Set集合对象 Set<Student> set = new HashSet<Student>(); //创建学生对象 Student s1 = new Student("哈哈",1); Student s2 = new Student("呵呵",2); Student s3 = new Student("嘻嘻",3); Student s4 = new Student("哈哈",1); Student s5 = new Student("嘻嘻",1); //添加元素 set.add(s1); set.add(s2); set.add(s3); set.add(s4); set.add(s5); //遍历集合对象 for(Student stu : set){ System.out.println(stu); } } }
Student [name=嘻嘻, age=3]
Student [name=呵呵, age=2]
Student [name=哈哈, age=1]
Student [name=嘻嘻, age=1]
5.
本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1863163
以上是关于java集合框架--Set集合的主要内容,如果未能解决你的问题,请参考以下文章