Set
发布日期:2021-06-27 12:55:56 浏览次数:30 分类:技术文章

本文共 3379 字,大约阅读时间需要 11 分钟。

文章目录

概述

java.util.Set 接口和java.util.List 接口一样,同样继承自Collection 接口,它与Collection 接口中的方法基本一致,并没有对Collection 接口进行功能上的扩充,只是比Collection 接口更加严格了。

Set接口中元素无需,并且不可重复

HashSet

java.util.HashSet是Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)

HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,具有良好的存取和查找性能。

保证元素唯一性的方式依赖于: hashCodeequals 方法。

package Demo2;import java.util.HashSet;import java.util.Iterator;public class Demo2 {
public static void main(String[] args) {
HashSet
set = new HashSet<>(); set.add("锄禾日当午"); set.add("汗滴禾下土"); set.add("谁知盘中餐"); set.add("粒粒皆辛苦"); set.add("锄禾日当午"); /* Iterator
iterator = set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); }*/ for (String s:set) {
System.out.println(s); } }}

由于HashSet利用散列表存储,因此无法保证存储顺序,是无序的。

并且添加重复元素也是无效的
在这里插入图片描述

TreeSet

TreeSet是属于排序的子类,因此TreeSet能够保存元素的有序性。

注意:此处的有序并非指按照输入顺序排序,而是保证Unicode排序顺序

package Demo2;import java.util.Set;import java.util.TreeSet;public class Demo3 {
public static void main(String[] args) {
Set
all = new TreeSet<>(); all.add("D"); all.add("X"); all.add("A"); System.out.println(all); }}//输出:[A, D, X]

虽然在增加元素的时候属于无序的操作,但是增加之后却可以为用户进行排序功能的实现。

当需要比较自己定义的类,则需要实现Comparable接口,并根据需要叙述排序规则

package Demo2;import java.util.Objects;import java.util.Set;import java.util.TreeSet;public class Demo3 {
public static void main(String[] args) {
TreeSet
data = new TreeSet<>(); Person p1 = new Person("张三",18); Person p2 = new Person("李四",20); data.add(p1); data.add(p2); for (Person p:data){
System.out.println(p); } } static class Person implements Comparable
{
private String name; private int age; @Override public int compareTo(Person o) {
//this与o比较 //返回的数据 负数 this小/0相等/正数this大 if (this.age>o.age){
return 1; }else if(this.age == o.age){
return 0; }else {
return -1; } } public 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 boolean equals(Object o) {
if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } @Override public int hashCode() {
return Objects.hash(name, age); } @Override public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }}

LinkedHashSet

HashSet可以保证元素唯一,但元素存放进去是无序的。当需要保证有序的时候,则可以使用HashSet下面的一个子类LinkedHashSet,它是链表和哈希表组合的一个数据存储结构。

转载地址:https://blog.csdn.net/weixin_43454088/article/details/116379129 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:List
下一篇:Iterator迭代器

发表评论

最新留言

不错!
[***.144.177.141]2024年04月06日 16时13分21秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章