【Java】HashSet集合用法

目录

[HashSet 集合特点](#HashSet 集合特点)

示例代码

手写HashSet集合

[HashSet 没有Get()](#HashSet 没有Get())


HashSet 集合特点

  1. HashSet 基于HashMap 来实现的,是一个不允许有重复元素的集合
  2. HashSet 允许有 null 值
  3. HashSet 是无序的,即不会记录插入的顺序
  4. HashSet集合实现了Set接口
  5. HashSet 没有Get(),所以不能使用普通for循环遍历

示例代码

java 复制代码
package com.collection.Demo09;

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

public class Test02 {
    public static void main(String[] args) {
        HashSet<String> strings = new HashSet<>();
        strings.add("mayilt01");
        strings.add("mayilt02");
        strings.add("mayilt03");
        strings.add("mayilt03"); //不允许有重复值,∵底层基于HashMap集合实现,
        //而HashSet.add() 底层存放元素 采用HashMap集合 Key 来存放,HashMap key值是不允许重复
        /**
         *     public boolean add(E e) {
         *         return map.put(e, PRESENT)==null;
         *     }
         */
        strings.add(null);//HashMap允许存放Key值 是为null
        Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next());//null,mayilt01,mayilt03,mayilt02,
            System.out.print(","); //上面输出结果说明:HashSet是无序的,∵底层基于HashMap集合实现
        }
    }
}

手写HashSet集合

java 复制代码
package com.collection.Demo09;

import java.util.HashMap;

/**
 * 手写HashSet集合
 */
public class MayiktHashSet<E> {
    /**
     * HashSet 底层是基于 HashMap 集合实现
     * 元素的值 就是为 HashMap 中的key
     */
    private HashMap<E, Object> map;
    private static final Object PRESENT = new Object();//小写转大写,快捷键 Ctrl+Shift+u

    public MayiktHashSet() {
        map = new HashMap<>();
    }

    public void add(E e) {
        map.put(e, PRESENT);
    }

    @Override
    public String toString() {
        return "MayiktHashSet{" +
                "map=" + map +
                '}';
    }

    public static void main(String[] args) {
        MayiktHashSet<Object> hashSet = new MayiktHashSet<>();
        hashSet.add("mayikt01");
        hashSet.add("mayikt02");
        hashSet.add("mayikt03");
        hashSet.add("mayikt03");//不允许重复值,下面输出中只有一个mayikt03
        System.out.println(hashSet);
        //MayiktHashSet{map={mayikt03=java.lang.Object@4554617c,
        // mayikt01=java.lang.Object@4554617c,
        // mayikt02=java.lang.Object@4554617c}}
    }

}

HashSet 没有Get()

java 复制代码
package com.collection.Demo09;

import java.util.HashSet;

public class Test03 {
    public static void main(String[] args) {
        HashSet<String> strings = new HashSet<>();
        strings.add("mayikt01");
        strings.add("mayikt02");
        strings.add("mayikt03");
        //HashSet 没有get(), ∵底层基于HashMap实现的,HashMap 存放Key是散列的,就没有使用index访问元素
        //∴不能够使用普通的for循环
//        for (int i = 0; i < strings.size(); i++) {}
        for (String str : strings) {
            System.out.println(str);
        }
    }
}

下一篇文章:HashSet存入学生对象

相关推荐
程序员黑豆5 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
wuyk5557 小时前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
hey_sml7 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
Doraemomo7 小时前
数据结构-环形链表
java·数据结构·链表
萧瑟余晖8 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
是未才9 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ttod_qzstudio9 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
萧瑟余晖10 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
不老刘11 小时前
【Java入门】Java服务部署方式全景对比:从java -jar到K8s
java·kubernetes·jar
离陌在学C#13 小时前
C# 重载与重写:深入理解面向对象编程的核心概念
java·c#