【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 分钟前
深入探讨Linux驱动开发:字符设备驱动开发与测试_linux 驱动开发设备号(2)
java·linux·驱动开发
4Forsee7 分钟前
【Android】动态操作 Window 的背后机制
android·java·前端
martian6657 分钟前
深入解析C++驱动开发实战:优化高效稳定的驱动应用
开发语言·c++·驱动开发
HappRobot10 分钟前
python类和对象
开发语言·python
小二李16 分钟前
第12章 koa框架重构篇 - Koa框架项目重构
java·前端·重构
cike_y19 分钟前
JavaBean&MVC三层架构
java·架构·mvc·javaweb·java开发
鸡吃丸子20 分钟前
React Native入门详解
开发语言·前端·javascript·react native·react.js
盼哥PyAI实验室23 分钟前
Python YAML配置管理:12306项目的灵活配置方案
开发语言·python
漂亮的小碎步丶24 分钟前
【启】Java中高级开发51天闭关冲刺计划(聚焦运营商/ToB领域)
java·开发语言
hd51cc31 分钟前
MFC运行时
开发语言·mfc