• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java HashSet深入理解

java HashSet深入理解

作者:wmj765 字体:[增加 减小] 来源:互联网 时间:2017-11-12

wmj765通过本文主要向大家介绍了java,collection,hashset等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前几天分析了HashMap,看懂hashMap后,再来看HashSet就简单多了,其实HashSet底层就初始化时即调用了HashMap,在看HashSet时建议先回顾下HashMap
java基础之集合框架–HashMap深入理解及应用

HashSet源码分析

我们直接来看下hashset的源码,可以看到当我们初始化对象时,其实是初始化了一个hashmap,其他的有参构造器也分别调用了hashMap的有参构造方法,代码中就不展示了。

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    static final long serialVersionUID = -5024744406713321676L;

    private transient HashMap<E,Object> map;

    //存放HashMap的value,我们add时传的是key,value为new Object()
    private static final Object PRESENT = new Object();

    //无参构造器,其实就是一个hashMap
    public HashSet() {
        map = new HashMap<>();
    }

HashSet常用方法

再来看看HashSet的常用方法,size方法、add方法、遍历等等,其实都是调用map中的方法,其他方法就不一一列举了,在add方法时,map.put方法,key为add的对象,value为new Object();

//大小
public int size() {
        return map.size();
    }

//添加元素,若不重复返回true
public boolean add(E e) {
        return map.put(e, PRESENT)==null;

//遍历
public Iterator<E> iterator() {
        return map.keySet().iterator();
    }

其实只要我们get到hashMap,其实同时你也完全了解了HashSet;
最后有一个问题大家思考下,有一组学生,想要放进一个集合中,放在什么集合中能保证取出来的时候有序?HashSet/HashMap可以么

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JavaThreadPoolExecutor线程池调度器
  • 全面掌握Java内部类
  • Java中的常用阻塞队列源码分析
  • Java虚拟机(四)垃圾收集算法
  • Java内存模型与线程
  • Java中如何优雅正确的终止线程
  • [译]深入字节码操作:使用ASM和Javassist创建审核日志
  • IntelliJIDEA平台下JNI编程(五)—本地C代码创建Java对象及引用
  • 【java总结】设计模式详解
  • Java代码中常见技术债务处理之Exception

相关文章

  • 2017-05-28Java语言实现简单FTP软件 辅助功能模块FTP站点管理实现(12)
  • 2017-05-28Java Socket编程(四) 重复和并发服务器
  • 2017-05-28C# 中Excel导入时判断是否被占用三种方法
  • 2017-05-28java 根据经纬度获取地址实现代码
  • 2017-05-28Java 条件控制与循环控制实例
  • 2017-05-28Spring整合Redis完整实例代码
  • 2017-05-28浅谈java中为什么实体类需要实现序列化
  • 2017-05-28浅谈Java多线程实现及同步互斥通讯
  • 2017-05-28详解使用Spring3 实现用户登录以及权限认证
  • 2017-05-28Java IO中字节流复制图片实现代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java中引用的用法
    • Spring3 MVC请求参数获取的几种方法小结
    • java 代理模式及动态代理机制深入分析
    • 学习Spring-Session+Redis实现session共享的方法
    • SpringBoot整合ElasticSearch实践
    • 浅谈java里的EL表达式在JSP中不能解析的问题
    • Java中的FileInputStream 和 FileOutputStream 介绍_动力节点Java学院整理
    • spring boot下 500 404 错误页面处理的方法
    • Spring MVC学习笔记之json格式的输入和输出
    • Java 中的Printstream介绍_动力节点Java学院整理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有