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键;

代码示例 

import java.util.Hashtable;

public class Day35 {
    public static void main(String[] args){
        // 创建hashtable
        Hashtable<String, String> hashtable = new Hashtable<String, String>();

        // 添加
        System.out.println("------put()------");
        hashtable.put("name", "Jack");
        hashtable.put("age", "20");
        hashtable.put("sex", "man");
        hashtable.put("height", "188");
        hashtable.put("weight", "80");
        System.out.println(hashtable);


        // 判断
        if (hashtable.containsKey("name")){
            System.out.println(hashtable.get("name"));
        }

        // 删除
        if (hashtable.containsValue("20")){
            hashtable.remove("age");
            System.out.println(hashtable);
        }

        // 遍历
        for (String key: hashtable.keySet()){
            String value = hashtable.get(key);
            System.out.println("key: " + key + ", value: " + value);
        }
    }
}
{height=188, age=20, name=Jack, sex=man, weight=80}
Jack
{height=188, name=Jack, sex=man, weight=80}
key: height, value: 188
key: name, value: Jack
key: sex, value: man
key: weight, value: 80

(五)IdentityHashMap

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

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

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

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

Map<String, String> hashmap = new HashMap<>();
hashmap.put("name", "Jack");
hashmap.put("name", "Marry");
hashmap.put("name", "Tom");
hashmap.put("name", "Jerry");
System.out.println(hashmap);

hashmap.put(new String("name"), "Jack");
hashmap.put(new String("name"), "Marry");
System.out.println(hashmap);
{name=Jerry}
{name=Marry}

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

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

Map<String, String> identityHashMap = new IdentityHashMap<>();
identityHashMap.put("name", "Jack");
identityHashMap.put("name", "Marry");
identityHashMap.put("name", "Tom");
identityHashMap.put("name", "Jerry");
System.out.println(identityHashMap);

identityHashMap.put(new String("name"), "Jack");
identityHashMap.put(new String("name"), "Marry");
System.out.println(identityHashMap);
{name=Jerry}
{name=Jerry, name=Jack, name=Marry}

(六)EnumMap

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


版权声明:本文为weixin_45666660原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。