Java基础之---- 集合(二)set

本文介绍了Java中的Set接口,它是Collection的子接口,不允许存储重复元素。讲解了HashSet、LinkedHashSet和TreeSet三个主要实现类的特点。HashSet基于Hash算法,不保证元素顺序,非线程安全;LinkedHashSet保持插入顺序;TreeSet基于红黑树,支持自然排序和自定义排序。
摘要由CSDN通过智能技术生成

Collection子接口----Set接口

Set接口概述

  • Set接口是Collection的子接口,Set接口没有提供额外的方法。
  • Set集合不允许包含相同的元素,如果把两个相同的元素加入的Set集合中,则会添加操作失败。
  • Set判断两个对象是否相同,会调用equals()和hashCode()(对于HashSet来说)。
  • Set内部实现是基于Map的,所以Set取值时不保证数据和存入的时候顺序一致,并且不允许空值,不允许重复值
    由下图看set的继承结构
    在这里插入图片描述
    可以看出,Set主要有2个实现方式,一个是TreeSet,另一个是HashSet
    这个Set的特点,主要由其内部的Map决定的,可以负责任的说一句,Set就是Map的一个马甲

Set实现类之一HashSet

HashSet是Set接口的典型实现,大多数时候使用Set集合时都使用这个实现类。
HashSet按照Hash算法来存储集合中的元素,因为具有很好的存取、查找、删除性能。、
HashSet具有以下特点:

  • 不能保证元素的排列顺序。
  • HashSet不是线程安全的。
  • 集合元素可以是null。
  • hashSet集合判断两个元素相等的标准:
  • 两个元素的hashCode()方法返回值相等。
  • 两个元素的equals()方法返回值也相等。
  • 对于存放在Set容器中的对象,对应的类一定要重写equals()方法和* hashCode()方法,以实现对象相等的原则。
    示例
package day18;

import java.util.Objects;

/**
 * @motto: 一身转战三千里,一剑可当百万兵。
 * @author: 不为往事扰,余生只爱笑。
 * @version: 1.0
 * @since: 2019-06-22
 */
public class Person {
   
    private String name;
    private Integer age;

    public Person() {
   
    }

    public Person(String name, Integer age) {
   
        this.name = name;
        this.age = age;
    }

    public String getName() {
   
        return name;
    }

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

    public Integer getAge() {
   
        return age;
    }

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

    @Override
    public boolean equals(Object o) {
   
        if (this ==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值