• 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博客

  • 相关阅读:
    muduo库剖析(1)
    从权限系统的菜单管理看算法和数据结构
    [突发奇想] 考研 & LOL & CF & 红警
    Qt 日志重定向
    【无标题】
    Hadoop入门(二):手把手带你从零基础到完整安装配置
    Redis 命令—— 超详细操作演示!!!
    java随手记
    linux之date命令
    网课查题API接口(免费)
  • 原文地址:https://blog.csdn.net/weixin_45666660/article/details/126007502