Java基础之集合Set详解

 更新时间:2021年05月10日 09:51:01   作者:小亮点科技  
这篇文章主要介绍了Java基础之集合Set详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有很好地帮助,需要的朋友可以参考下

一、概述

Set是Java中的集合类,提供了一种无顺序,不重复的集合。常用的子类包括HashSet, TreeSet等。

  • HashSet底层使用HashMap实现,根据元素的hashCode和equals来判断是否为重复元素。当元素的hashCode相同且equals返回true时则认为是重复元素。因为使用了hash算法所以HashSet有很好的添加和访问性能。可以放入null但只能放一个null
  • TreeSet底层使用红黑树实现,Set上的元素被放在一个自动排序的红黑树中。不能放入null

二、Set的常用方法

  • add() 向Set中添加元素
  • size() 返加Set的大小,即Set中元素的数量
  • remove(Object o) 从Set上删除元素
  • boolean contains(Object o) 检查Set中是否包含某个元素,包含返回true,不包含返回false
  • iterator() 返回Set的迭代器
  • clear() 清空Setis
  • Empty() 检查Set是否为空,为空返回true, 否则返回false
package collect;

import java.util.HashSet;
import java.util.Set;

/**
 * [简要描述]:Set使用
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/5/6 15:15
 * @since JDK 1.8
 */
public class SetTest1 {
    public static void main(String[] args) {
        Set<String> set =  new HashSet<>();

        //添加元素到Set
        set.add("张三");
        set.add("李四");
        set.add("王五");

        //打印Set
        System.out.println(set);

        //再加入一个王五,不能添加成功
        boolean rst = set.add("王五");
        System.out.println("添加结果:" + rst);
        System.out.println(set);

        //HashSet可以加入null,但只能加入一个null
        rst = set.add(null);
        System.out.println("添加第一个null:" + rst);
        System.out.println(set);
        rst = set.add(null);
        System.out.println("添加第二个null:" + rst);
        System.out.println(set);

        //判断Set中是否包含某个元素
        rst = set.contains("张三");
        System.out.println("是否包含元素\"张三\":" + rst);

        //删除元素
        set.remove("张三");
        System.out.println(set);

        //判断Set中是否包含某个元素
        rst = set.contains("张三");
        System.out.println("是否包含元素\"张三\":" + rst);

        //Set的大小,即Set中元素的数量
        int size = set.size();
        System.out.println("Set的大小:" + size);

        //判断Set是否为空
        boolean isEmpty = set.isEmpty();
        System.out.println("Set是否为空:" + isEmpty);

        //清空Set
        set.clear();
        System.out.println(set);

        //判断Set是否为空
        isEmpty = set.isEmpty();
        System.out.println("Set是否为空:" + isEmpty);

    }
}

运行结果:

[李四, 张三, 王五]
添加结果:false
[李四, 张三, 王五]
添加第一个null:true
[null, 李四, 张三, 王五]
添加第二个null:false
[null, 李四, 张三, 王五]
是否包含元素"张三":true
[null, 李四, 王五]
是否包含元素"张三":false
Set的大小:3
Set是否为空:false
[]
Set是否为空:true

注:TreeSet不能添加null元素,添加null时会抛出NullPointerException异常

package collect;

import java.util.Set;
import java.util.TreeSet;

/**
 * [简要描述]: Set
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/5/6 16:28
 * @since JDK 1.8
 */
public class SetTest2 {
    public static void main(String[] args) {
        Set<String> set =  new TreeSet<>();

        //TreeSet不能加入null
        boolean rst = set.add(null);
        System.out.println("添加第一个null:" + rst);
        System.out.println(set);

    }
}

运行结果:

Exception in thread "main" java.lang.NullPointerException
 at java.util.TreeMap.compare(TreeMap.java:1294)
 at java.util.TreeMap.put(TreeMap.java:538)
 at java.util.TreeSet.add(TreeSet.java:255)
 at collect.SetTest2.main(SetTest2.java:19)

package collect;

import java.util.TreeSet;

/**
 * [简要描述]: Set
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/5/6 16:28
 * @since JDK 1.8
 */
public class SetTest3 {
    public static void main(String[] args) {
        TreeSet<String> set =  new TreeSet<>();

        //添加元素到Set
        set.add("B");
        set.add("A");
        set.add("李四");
        set.add("王五");
        set.add("张三");
        set.add("a");


        //打印Set
        System.out.println(set);

        //再加入一个王五,不能添加成功
        boolean rst = set.add("王五");
        System.out.println("添加结果:" + rst);
        System.out.println(set);

        //获取Set中的第一个元素
        System.out.println(set.first());
        //获取Set中的最后一个元素
        System.out.println(set.last());

        //判断Set中是否包含某个元素
        rst = set.contains("张三");
        System.out.println("是否包含元素\"张三\":" + rst);

        //删除元素
        set.remove("张三");
        System.out.println(set);

        //判断Set中是否包含某个元素
        rst = set.contains("张三");
        System.out.println("是否包含元素\"张三\":" + rst);

        //Set的大小,即Set中元素的数量
        int size = set.size();
        System.out.println("Set的大小:" + size);

        //判断Set是否为空
        boolean isEmpty = set.isEmpty();
        System.out.println("Set是否为空:" + isEmpty);

        //清空Set
        set.clear();
        System.out.println(set);

        //判断Set是否为空
        isEmpty = set.isEmpty();
        System.out.println("Set是否为空:" + isEmpty);


    }
}

运行结果:

[A, B, a, 张三, 李四, 王五]
添加结果:false
[A, B, a, 张三, 李四, 王五]
A
王五
是否包含元素"张三":true
[A, B, a, 李四, 王五]
是否包含元素"张三":false
Set的大小:5
Set是否为空:false
[]
Set是否为空:true

三、Set的遍历

3.1增强for循环

package collect;

import java.util.HashSet;
import java.util.Set;

/**
 * [简要描述]:增强for循环遍历Set
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/5/6 17:01
 * @since JDK 1.8
 */
public class SetTest4 {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();

        set.add("唐僧");
        set.add("孙悟空");
        set.add("猪悟能");
        set.add("沙悟净");
        System.out.println(set);

        for(String item:set){
            System.out.println(item);
        }
    }
}

运行结果:

[猪悟能, 孙悟空, 沙悟净, 唐僧]
猪悟能
孙悟空
沙悟净
唐僧

3.2 迭代器遍历

package collect;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * [简要描述]:增强for循环遍历Set
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/5/6 17:01
 * @since JDK 1.8
 */
public class SetTest5 {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();

        set.add("唐僧");
        set.add("孙悟空");
        set.add("猪悟能");
        set.add("沙悟净");
        System.out.println(set);

        Iterator<String> iterator = set.iterator();

        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }

    }
}

运行结果:

[猪悟能, 孙悟空, 沙悟净, 唐僧]
猪悟能
孙悟空
沙悟净
唐僧

到此这篇关于Java基础之集合Set详解的文章就介绍到这了,更多相关Java集合Set内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 调整格式日志输出

    Java 调整格式日志输出

    本文主要介绍Java 的日志输出格式,在开发java的时候会经常看日志进行调试或者查看错误,这里给大家介绍日志输出调整格式,以便大家看日志的时候更加方便,
    2016-07-07
  • Kotlin 基础教程之类、对象、接口

    Kotlin 基础教程之类、对象、接口

    这篇文章主要介绍了Kotlin 基础教程之类、对象、接口的相关资料,需要的朋友可以参考下
    2017-06-06
  • SpringMVC配置javaConfig及StringHttpMessageConverter示例

    SpringMVC配置javaConfig及StringHttpMessageConverter示例

    这篇文章主要介绍了SpringMVC配置javaConfig及StringHttpMessageConverter实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • SpringBoot使用注解进行分页的实现示例

    SpringBoot使用注解进行分页的实现示例

    分页使用可以说非常普遍了,有时候会需要非常灵活的方式去开启或关闭分页,尝试使用一下注解的方式来进行分页,本文主要介绍了SpringBoot使用注解进行分页的实现示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 关于mybatis mapper类注入失败的解决方案

    关于mybatis mapper类注入失败的解决方案

    这篇文章主要介绍了关于mybatis mapper类注入失败的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • MybatisPlus分页失效不起作用的解决

    MybatisPlus分页失效不起作用的解决

    在使用MybatisPlus的selectPage时发现分页不起作用,每次返回的都是全部的数据,本文就来介绍一下MybatisPlus分页失效不起作用的解决,感兴趣的可以了解一下
    2024-03-03
  • SpringBoot使用jasypt加解密密码的实现方法(二)

    SpringBoot使用jasypt加解密密码的实现方法(二)

    这篇文章主要介绍了SpringBoot使用jasypt加解密密码的实现方法(二),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 解决mybatis plus 驼峰式命名规则问题

    解决mybatis plus 驼峰式命名规则问题

    这篇文章主要介绍了解决mybatis plus 驼峰式命名规则,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Spring Boot Admin邮件警报整合过程解析

    Spring Boot Admin邮件警报整合过程解析

    这篇文章主要介绍了Spring Boot Admin邮件警报整合过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java实现银行ATM系统

    Java实现银行ATM系统

    这篇文章主要为大家详细介绍了Java实现银行ATM系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论