`

系统研究Java--容器(四)--Map和Set

阅读更多

Map是Java容器的又一长老,映射表(也称为关联数组),基本思想是维护一对键-值对,通过键来查找值。

标准Java类库中包含Map的几种基本实现,包括:HashMap,TreeMap,LinkedHashMap,WeakHashMap,ConcurrentHashMap,IdentityHashMap,他们之间各自有一个自己的特性。

  1. HashMap:HashMap采用特殊的形式进行存储,这种形式被称为散列码,通过HashMap的实现可以看出,HashMap保存了一个数组,在插入数据的时候,同一个Key可以有一个固定的HashCode,通过这个HashCode将<K,V>这样的键值对映射到数组对应的位置,当然在采用这种散列码映射的时候难免会产生冲突,所以数组的每一个位置相当于指向了一个链表,当多个Key映射到同一个hashCode的时候,就要通过equals和==来比较key,所以这样在查找时的效率是相当快的。可以通过构造器设置容量和负载因子,以调整容器的性能。从迭代方法上来说,HashMap有两种迭代方式,一种是根据HashMap内部的HashIterator进行迭代,也就是对HashMap.Entry进行迭代;而另一种方法HashMap提供了一个KeySet功能,让使用者可以通过遍历Key来进行迭代。
  2. LinkedHashMap:类似于HashMap,但是迭代便利他时,取得“键值对”的顺序是插入次序,或者是最近最少使用(LRU)次序。只比HashMap慢一点;而在迭代访问时HashMap相当于是对数组的遍历,而LinkedHashMap是对一个链表的遍历,因为它使用链表来维护内部次序。从内部结构来说LinkedHashMap继承于HashMap又重新实现了自己的Entry和Iterator,这样就具有了上面的功能。
  3. TreeMap:基于AVL Tree(也叫平衡树或者红黑树)的实现。查看“键”或“键值对”时,他们会被排序(次序由Comparable或Comparator决定)。TreeMap的特点在于,所得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
  4. WeakHashMap, 弱键(weak key)映射,允许释放映射所指的对象;这是为解决某类特殊问题而设计的。如果映射之外没有引用指向某个“键”,则此“键”可被垃圾回收器回收。
  5. ConcurrentHashMap,一种线程安全的Map,他不涉及同步加锁。
  6. IdentityHashMap,使用==代替equals对“键”进行比较的散列映射。

Set,大概看了一些Set的实现类,如HashSet,TreeSet,发现Set其实是基于Map来搭建的,如果你了解了Map的结构那你就知道Set是怎么回事儿了,看了jdk的源码就会知道,原来所谓的Set都是由Map构成的,只不过Map是通过<Key,Value>的形式存储,而Set中的Value都指向同一个对象,jdk中给他起名叫PRESENT(替代者),这样就不会造成太大的空间浪费了。

HashSet的实现

而LinkedHashSet继承自HashSet,

再看一下TreeSet


分享到:
评论

相关推荐

    java中set、list和map的使用方法实例

    // java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器(container)对象中的各个元素, // 而又不需暴露该...

    02-Java集合容器面试题(2020最新版)-重点.pdf

    Java集合容器是Java编程中非常重要的组成部分,掌握其概念、原理以及各种集合类的特点和使用场景对于开发高质量的应用程序至关重要。通过本篇文章的学习,希望读者能够更好地理解和应用Java集合容器,提升编程技能。

    java练习题--容器使用练习

    9. 集合接口和实现:理解Collection、List、Set、Map等接口,以及它们的实现类,比如ArrayList实现了List接口,HashSet实现了Set接口,HashMap实现了Map接口。 10. 排序与比较器:对于支持排序的容器,如TreeSet和...

    JAVA容器的概述,List,Map,Set

    JAVA容器的概述,List,Map,Set

    Java集合类List-Set-Map的区别和联系.doc

    Java集合框架是编程中不可或缺的一部分,它提供了多种数据结构,如List、Set和Map,用于存储和管理对象。下面我们将详细探讨这些集合类的区别、联系以及何时选择它们。 首先,数组(Array)是最基础的数据结构,它...

    Java-Interview-超全集合github上评分最高的jiva面试题

    Java面试是每位Java开发者职业生涯中的重要环节,而GitHub上的高分项目往往汇聚了社区的智慧结晶,提供了丰富的面试准备资源。"Java-Interview-超全集合github上评分最高的jiva面试题"就是一个这样的宝藏,它涵盖了...

    Java-实用程序设计第章-容器类(共52张PPT).pptx

    Java容器类是Java集合框架的重要组成部分,主要用于存储和管理对象。...理解并熟练掌握Java容器类是提升Java编程能力的关键,因为它们是构建复杂数据结构和算法的基础,广泛应用于各种软件系统中。

    02-Java集合容器面试题-重点.docx

    Java集合容器概述、集合框架、List、Set、Map接口、Iterator、ArrayList、LinkedList、Vector、HashSet、HashMap、Queue、BlockingQueue、ConcurrentHashMap等。 Java 集合容器概述 Java 集合容器是用于存储数据...

    List set map集合容器的区别

    根据给定文件的信息,我们可以详细地探讨一下Java中几种主要的集合容器——List、Set以及Map的区别,并且深入了解它们各自的特性和应用场景。 ### 一、List #### 1. ArrayList - **特点**:`ArrayList`是基于动态...

    基础深化和提高-java容器

    Java容器主要分为两大类:Collection 和 Map。 Collection: Collection表示一组对象,它的主要子接口包括List、Set和Queue。其中: List:以线性方式存储元素,允许重复元素,并且可以根据索引访问元素。 Set:不...

    Java容器有两种基本类型Collection 和 Map

    Java 容器的两种基本类型:Collection 和 Map Collection 和 Map 是 Java 中的两种基本容器类型,它们都可以用来存储和管理对象,但它们有着不同的特点和用途。 Collection 是一种聚集对象的容器,每个位置只能...

    Java-J2SE学习笔记

    - **接口与实现**:List、Set、Map接口,以及对应的实现类,理解它们的特点和应用场景。 - **迭代器**:用于遍历集合元素的接口,所有集合都可以通过iterator()方法获取迭代器。 5. **输入/输出(I/O)**: - **...

    java容器学习心得

    通过以上解析,我们可以看到Java容器的强大功能和灵活性,它们不仅能够高效地存储和操作数据,还能适应不同的应用场景,是Java程序员不可或缺的工具箱。掌握并灵活运用这些容器,将极大地提升编程效率和代码质量。

    java容器详细解析

    Java容器主要分为两大类:Collection和Map。 Collection Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Collection接口提供了基本的操作方法,例如add、remove、contains等。 List List是一个...

    java-corejava

    2. **集合框架**:Java集合框架是处理对象集合的核心工具,包括List、Set、Queue和Map四大接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。理解和掌握它们的特性和使用场景,能够帮助开发者高效地管理...

    JAVA--pdf3

    7. **集合框架**:Java集合框架包括List、Set、Map等接口以及ArrayList、HashSet、HashMap等实现类,提供了存储和操作对象的强大工具。 8. **多线程**:Java内置对多线程的支持,通过Thread类和Runnable接口,可以...

    an-introduction-of-java-programming.rar_java programming

    Java集合框架包括接口(如List、Set、Map)和实现类(如ArrayList、HashSet、HashMap),提供了存储和操作对象的高效工具。 7. 输入/输出(I/O) Java的I/O流系统支持读写文件、网络通信等多种数据传输,分为字节流...

    JAVA-API 全部资源

    3. **集合框架**:`java.util`包中的`List`、`Set`、`Map`接口及其实现类,如`ArrayList`、`HashSet`和`HashMap`,是数据存储和操作的基础。 4. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了多...

    java-电子书类 李兴华java教程

    这部分内容包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)接口及其实现类,以及泛型、迭代器和比较器等相关概念。 线程与并发处理是Java的另一大特色。在多核处理器...

Global site tag (gtag.js) - Google Analytics