Java学习路线-36:Set集合

简介: Java学习路线-36:Set集合

第30 章 : Set集合

130 Set接口简介

Set集合不允许保存重复数据

继承关系

-@Iterable
    -@Collection
        -@Set
            -@SortedSet
                -@NavigableSet
AbstractCollection(Collection)
    -AbstractSet(Set)
        -HashSet(Set, Cloneable, java.io.Serializable) 
        -TreeSet(NavigableSet, Cloneable, java.io.Serializable)

131 HashSet子类

HashSet元素无序

import java.util.HashSet;
import java.util.Set;
class Demo{
    public static void main(String[] args) {
        Set<String> list = new HashSet<String>();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        System.out.println(list);
        // [Hello, World]
        list.forEach(System.out::println);
        /**
         Hello
         World
         */
    }
}

132 TreeSet子类

TreeSet数据有序,按照升序排序

import java.util.Set;
import java.util.TreeSet;
class Demo{
    public static void main(String[] args) {
        Set<String> list = new TreeSet<String>();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        System.out.println(list);
        // [Hello, World]
        list.forEach(System.out::println);
        /**
         Hello
         World
         */
    }
}

133 分析TreeSet子类排序操作

TreeSet 通过TreeMap实现

需要实现Comparable接口

自定义类需要将所有属性进行比对,首选HashSet

import java.util.Set;
import java.util.TreeSet;
class Person implements Comparable<Person> {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(Person other) {
        if (this.age > other.age) {
            return 1;
        } else if (this.age < other.age) {
            return -1;
        } else {
            return this.name.compareTo(other.name);
        }
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class Demo {
    public static void main(String[] args) {
        Set<Person> list = new TreeSet<Person>();
        list.add(new Person("Jack", 24));
        list.add(new Person("Tom", 23));
        list.add(new Person("Tom", 23));
        System.out.println(list);
        // [Person{name='Tom', age=23}, Person{name='Jack', age=24}]
        list.forEach(System.out::println);
        /**
         Person{name='Tom', age=23}
         Person{name='Jack', age=24}
         */
    }
}

134 分析重复元素消除

实现重复元素判断

TreeSet Comparable接口

HashSet 对象编码 hashCode方法 ; 对象比较 equals方法

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
class Person implements Comparable<Person> {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        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 int compareTo(Person other) {
        if (this.age > other.age) {
            return 1;
        } else if (this.age < other.age) {
            return -1;
        } else {
            return this.name.compareTo(other.name);
        }
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class Demo {
    public static void main(String[] args) {
        Set<Person> list = new HashSet<Person>();
        list.add(new Person("Jack", 24));
        list.add(new Person("Tom", 23));
        list.add(new Person("Tom", 23));
        System.out.println(list);
        // [Person{name='Tom', age=23}, Person{name='Jack', age=24}]
        list.forEach(System.out::println);
        /**
         Person{name='Tom', age=23}
         Person{name='Jack', age=24}
         */
    }
}



相关文章
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
158 6
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
124 5
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
134 2
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
125 3
|
11月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
4337 113
|
11月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
659 113
|
11月前
set集合
HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。 LinkedHashSet: LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。 TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。
|
Java 开发者
在Java的集合世界里,Set以其独特的特性脱颖而出,它通过“哈希魔法”和“红黑树防御”两大绝技
【10月更文挑战第13天】在Java的集合世界里,Set以其独特的特性脱颖而出。它通过“哈希魔法”和“红黑树防御”两大绝技,有效抵御重复元素的侵扰,确保集合的纯洁性和有序性。无论是“人海战术”还是“偷梁换柱”,Set都能从容应对,成为开发者手中不可或缺的利器。
102 6
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
【10月更文挑战第16天】Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。通过 hashCode() 和 equals() 方法实现唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 添加和遍历元素,体现了 Set 的高效性和简洁性。
172 4