Java的集合容器(下)

来源:互联网 发布:琵琶 知乎 编辑:程序博客网 时间:2024/06/09 14:07

这篇来总结关于Map的知识点,为了让单独看到这篇文章的某个人阅读起来不那么突兀,先将上篇中已有的集合类型的总结附上上Java的集合容器(上)供查看。

关于Map的学习比较失败,先留此坑,日后来填。


集合的类型

集合主要有三种类型:Set(集),List(列表),Map(映射)。

  • Set(集):集(Set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。
    对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。
    集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。

  • List(列表):列表(List)的主要特征是它的对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。
    列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。

  • Map(映射):映射与集或列表有明显区别,映射中每一项都是成对的。映射中存储的每个对象(value)都有一个相关的关键字(key),key决定了value在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的。
    关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生一个被称作散列码(hash code)的整数值,散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。
    理想情况下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。


集合框架详解


Java集合框架的基本接口[I]/类[C]层次结构

java.util.Collection [I]    +--java.util.List [I]        +--java.util.LinkedList [C]        +--java.util.ArrayList [C]        +--java.util.Vector [C]          +--java.util.Stack [C]    +--java.util.Set [I]       +--java.util.HashSet [C]       +--java.util.SortedSet [I]       +--java.util.TreeSet [C]java.util.Map [I]    +--java.util.SortedMap [I]        +--java.util.TreeMap [C]    +--java.util.Hashtable [C]    +--java.util.HashMap [C]    +--java.util.LinkedHashMap [C]    +--java.util.WeakHashMap [C]

由结构图可看出,Map并不继承自Collection接口。

Map 提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作“键”(key)“值”(value)),一个Map中不能包含相同的key,每个key只能映射一个 value。
从概念上而言,我们可以将 List 看作是具有数值键的 Map,但实际上两者并没有直接的联系。


Map的常用方法

  1. 存储元素
    V put(K key, V value) –将指定的值与此映射中的指定键关联

  2. 删除元素
    V remove(Object key) – 如果存在一个键的映射关系,则将其从此映射中移除

  3. 判断
    boolean containsKey(Object key) –如果此映射包含指定键的映射关系,则返回 true。
    boolean containsValue(Object value) – 如果此映射将一个或多个键映射到指定值,则返回 true

  4. 长度
    int size() 返回此映射中的键-值映射关系数

  5. 获取元素
    V get(Object key) – 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null


核心Map

Java 自带了各种 Map 类。这些Map可归为三种类型:

  1. 通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现

    • HashMap
    • Hashtable
    • Properties
    • LinkedHashMap
    • IdentityHashMap
    • TreeMap
    • WeakHashMap
    • ConcurrentHashMap
  2. 专用Map,我们通常不必亲自创建此类 Map,而是通过某些其他类对其进行访问

    • java.util.jar.Attributes
    • javax.print.attribute.standard.PrinterStateReasons
    • java.security.Provider
    • java.awt.RenderingHints
    • javax.swing.UIDefaults
  3. 一个用于帮助实现我们自己的 Map 类的抽象类

    • AbstractMap

Map接口的实现类


Hashtable
底层是哈希表结构。
线程安全的,并且键和值不能为null。


HashMap
与Hashtable类似,底层是哈希表结构。
线程不安全的,键和值可以为null。


LinkedHashMap
底层是链表和哈希表,
线程不安全。


TreeMap
底层是二叉树,
线程不安全。


注:部分知识点参考自以下博文

  • Java Map 集合类简介 | Oracle Technology Network

  • 黑马程序员–javaSE–java集合容器总结

  • 浅谈Java中的Set、List、Map的区别

  • Java基本概念:集合类 List/Set/Map… 的区别和联系

0 0