【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存入学生对象

相关推荐
liulilittle1 天前
LwIP协议栈MPA多进程架构
服务器·开发语言·网络·c++·架构·lwip·通信
水淹萌龙1 天前
玩转 Go 表达式引擎:expr 实战指南
开发语言·后端·golang
艾莉丝努力练剑1 天前
【C++:继承】面向对象编程精要:C++继承机制深度解析与最佳实践
开发语言·c++·人工智能·继承·c++进阶
penguin_bark1 天前
C++ 异步编程(future、promise、packaged_task、async)
java·开发语言·c++
小龙报1 天前
《数组和函数的实践游戏---扫雷游戏(基础版附源码)》
c语言·开发语言·windows·游戏·创业创新·学习方法·visual studio
又是忙碌的一天1 天前
Java基础 与运算
java·开发语言
liu****1 天前
笔试强训(八)
开发语言·算法·1024程序员节
程序猫.1 天前
学生管理系统
java·1024程序员节
m0_748241231 天前
Java注解与反射实现日志与校验
java·开发语言·python
nianniannnn1 天前
Qt布局管理停靠窗口QDockWidget类
开发语言·数据库·c++·qt·qt5·qt6.3