码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java学习笔记——集合


    目录

    一、集合框架

    二、Collection

    (一)List

    (二)Queue

    (三)Set

    三、Map

    (一)HashMap

    (二)WeakHashMap

    (三)TreeMap

    (四)Hashtable

    (五)IdentityHashMap

    (六)EnumMap


    一、集合框架

    Java 集合框架主要包括两种类型的容器:

    • 集合(Collection)—— 存储一个元素集合;
    • 图(Map)—— 存储键/值对映射;

    下面将对这两种集合框架进行详细地介绍。

    二、Collection

    :接口  :类

     Collection是一个顶层接口,主要用来定义集合。

    而Collection派生出三个子接口,分别是List,Queue,Set。

    • List:有序可重复的集合,可直接根据元素的索引来访问
    • Queue:队列
    • Set:无序不可重复的集合,只能根据元素本身来访问

    (一)List

    Java学习笔记——Collection之List_柠檬不甜会酸的博客-CSDN博客

    (二)Queue

    Java学习笔记——Collection之Queue_柠檬不甜会酸的博客-CSDN博客

    (三)Set

    Java学习笔记——Collection之Set_柠檬不甜会酸的博客-CSDN博客

    三、Map

     :接口  :类

    Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。

    Map的实现类方法:

    • HashMap:数组 + 链表 + 红黑树
    • WeakHashMap:是一个弱引用,基于哈希表的Map基础实现
    • TreeMap:红黑树
    • Hashtable:数组
    • IdentityHashMap
    • EnumMap

    (一)HashMap

    Java学习笔记——Map之HashMap_柠檬不甜会酸的博客-CSDN博客

    (二)WeakHashMap

    • WeakHashMap类基于哈希表的Map基础实现,带有弱键;
    • 基于map接口,是一种弱键相连,WeakHashMap里面的键会自动回收;
    • 支持null值和null键;
    • 不允许重复;
    • fast-fail机制;
    • WeakHashMap经常用作缓存;

    在Java中,引用共分为四种,分别是:强引用、软引用、弱引用和虚引用。

    WeakHashMap则是弱引用。

    (三)TreeMap

    Java学习笔记——Map之TreeMap_柠檬不甜会酸的博客-CSDN博客

    (四)Hashtable

    1. 初始容量:Hashtable的默认初始容量大小是11;
    2. 线程安全:线程安全;
    3. HashTable 的元素是头插法;
    4. HashTable:数组 + 链表;
    5. 不允许使用null值和null键;

    代码示例 

    1. import java.util.Hashtable;
    2. public class Day35 {
    3. public static void main(String[] args){
    4. // 创建hashtable
    5. Hashtable hashtable = new Hashtable();
    6. // 添加
    7. System.out.println("------put()------");
    8. hashtable.put("name", "Jack");
    9. hashtable.put("age", "20");
    10. hashtable.put("sex", "man");
    11. hashtable.put("height", "188");
    12. hashtable.put("weight", "80");
    13. System.out.println(hashtable);
    14. // 判断
    15. if (hashtable.containsKey("name")){
    16. System.out.println(hashtable.get("name"));
    17. }
    18. // 删除
    19. if (hashtable.containsValue("20")){
    20. hashtable.remove("age");
    21. System.out.println(hashtable);
    22. }
    23. // 遍历
    24. for (String key: hashtable.keySet()){
    25. String value = hashtable.get(key);
    26. System.out.println("key: " + key + ", value: " + value);
    27. }
    28. }
    29. }
    1. {height=188, age=20, name=Jack, sex=man, weight=80}
    2. Jack
    3. {height=188, name=Jack, sex=man, weight=80}
    4. key: height, value: 188
    5. key: name, value: Jack
    6. key: sex, value: man
    7. key: weight, value: 80

    (五)IdentityHashMap

    • IdentityHashMap不是一个通用的Map实现,虽然实现了Map接口,但其违反了Map的约定,即比较对象时使用equals方法。
    • IdentityHashMap无序,并且不是线性安全的。

    关于其使用equal比较对象这句话,下面简单用几个例子说明。

    Map是由key-value构成,若key相同,则不再重复添加。

    对于一般的Map实现类来说,即所指对象的值是否相同;

    1. Map hashmap = new HashMap<>();
    2. hashmap.put("name", "Jack");
    3. hashmap.put("name", "Marry");
    4. hashmap.put("name", "Tom");
    5. hashmap.put("name", "Jerry");
    6. System.out.println(hashmap);
    7. hashmap.put(new String("name"), "Jack");
    8. hashmap.put(new String("name"), "Marry");
    9. System.out.println(hashmap);
    1. {name=Jerry}
    2. {name=Marry}

     上述例子表明,所添加的元素key均为name,因此不再重复添加。

    而IdentityHashMap不是一个通用的Map实现,虽然实现了Map接口,但其违反了Map的约定,即比较对象时使用equals方法,即比较对象是否相同。

    1. Map identityHashMap = new IdentityHashMap<>();
    2. identityHashMap.put("name", "Jack");
    3. identityHashMap.put("name", "Marry");
    4. identityHashMap.put("name", "Tom");
    5. identityHashMap.put("name", "Jerry");
    6. System.out.println(identityHashMap);
    7. identityHashMap.put(new String("name"), "Jack");
    8. identityHashMap.put(new String("name"), "Marry");
    9. System.out.println(identityHashMap);
    1. {name=Jerry}
    2. {name=Jerry, name=Jack, name=Marry}

    (六)EnumMap

    Java学习笔记——枚举_柠檬不甜会酸的博客-CSDN博客

  • 相关阅读:
    Linux文本三剑客之首——awk
    如何快速选购腾讯云NVIDIA GPU云服务器实例?
    Ubuntu openssh-server 离线安装
    关于LWIP的一点记录(四)
    如何用个人电脑搭建一台本地服务器,并部署项目到服务器详细教程(Ubuntu镜像)
    单稳态中间继电器UEG/A-4DPDT/DC220V
    ORB-LSAM2:ComputeKeyPointsOctTree()提取特征:maxY = iniY + hCell + 6 为怎么是+6而不是+3?
    JSON & XML
    STM32的IIC
    市场人员被 CEO、销售要求去证明“数量指标”作用的现象越来越常见
  • 原文地址:https://blog.csdn.net/weixin_45666660/article/details/126007502
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号