Java中的集合从类的继承和接口的实现结构来说,可以分为两大类:

  1 继承自Collection接口,包含List、Set和Queue等接口和实现类。

  2 继承自Map接口,主要包含哈希表相关的集合类。

  第一类

  Collection接口继承和实现结构图如下:

  图中的绿色的虚线代表实现,绿色实线代表接口之间的继承,蓝色实线代表类之间的继承,下同。

  List

  常用的是ArrayList和LinkedList。ArrayList通过数组实现,随机访问比较快,增删操作比较慢。而LinkedList通过链表实现,增删操作比较快,随机访问比较慢。两者都是非线程安全的。

  Queue

  LinkedList实现了Deque接口,所以LinkedList具有双端队列的功能。PriorityQueue内部数据结构是堆,每次出队列的元素总是当前队列中最大值(大顶堆)或是最小值(小顶堆)。

  Set

  Set与List的主要区别是Set不允许元素重复,而List允许元素重复。HashSet和LinkedHashSet的区别在于后者保证元素插入集合的元素顺序与输出顺序保持一致。而它们与TreeSet的区别在于TreeSet按照Comparator进行排序,默认情况下按照字符的自然顺序升序排列。

  

  第二类

  Map接口继承和实现结构图如下:

  Map类型的集合最大的优点在于其查找效率比较高,理想情况下可以实现O(1)的时间复杂度。Map中最常用的是HashMap。LinkedHashMap与HashMap的区别在于前者能够保证插入集合的元素顺序与输出顺序一致。这两者与TreeMap的区别在于TreeMap根据键值进行排序,底层的实现也有本质的区别,如HashMap底层是一个哈希表,而TreeMap的底层是一棵树。在多线程环境下,通常使用ConcurrentHashMap,因为Hashtable效率比较低。

  参考资料

  Java集合之整体结构

Java 基础 集合框架的更多相关文章

  1. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  2. 十五、Java基础---------集合框架体系以及List

    在介绍集合之前先说一下数组,正如我们所知,数组是某一类型数据的集合,强调的是数据,而且必须单一:集合框架的不同之处在于存储的数据类型没有任何限制,既可以存储基本数据类型(会自动提升为相应的包装类)也可 ...

  3. java基础--集合框架的认识

    一.集合框架 对于不知道存储数量和更复杂的方式存储对象用集合框架. 其中有几个常用的接口和实现类:Collection父接口.List接口,Set接口,Map接口, ArrayList实现类.Link ...

  4. 十七、Java基础---------集合框架之Map

    前两篇文章中介绍了Collection框架,今天来介绍一下Map集合,并用综合事例来演示. Map<K,V> Map<K,V>:Map存储的是键值对形式的元素,它的每一个元素, ...

  5. Java基础——集合框架(待整理)

    ArrayList 和 和 Vector 的区别 从代码的最终的操作形式上可以发现,代码的输出结果与之前是一样的,而且没有区别,但是两者的区别还在于其内部的组成上. No. 区别点 Vector Ve ...

  6. 十六、Java基础---------集合框架之Set

    写在前面的话,这篇文章在昨天就写好了,今天打开的时候一不小心将第二天的文章粘贴到了这篇文章,很不幸的是除了标题之外依然面目全非,今天带着沉痛的心情再来写这篇文章! 上篇文章介绍了Collection体 ...

  7. Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator

    为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储对 ...

  8. Java基础-集合框架-ArrayList源码分析

    一.JDK中ArrayList是如何实现的 1.先看下ArrayList从上而下的层次图: 说明: 从图中可以看出,ArrayList只是最下层的实现类,集合的规则和扩展都是AbstractList. ...

  9. Java基础-集合框架的学习大纲

    1.List 和 Set 的区别 2.HashSet 是如何保证不重复的 3.HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)? 4.HashMap 的扩容过程 ...

随机推荐

  1. 腾讯云Ubuntu安装可视化桌面

    1.安装图形界面 sudo apt-get update 更新 1).sudo apt-get install xinit 2).sudo apt-get install gdm  ( 登陆窗口,用于 ...

  2. 微信支付JSAPI掉不起来支付按钮是什么原因?(原创)

    两种可能: 1.支付页面的js参数有问题 2.微信支付的配置有问题,大概率在微信支付授权目录是否有填写正确

  3. javascript 对象(四)

    一.对象概述 对象中包含一系列的属性,这些属性是无序的.每个属性都有一个字符串key和对应的value. var obj={x:1,y:2}; obj.x; obj.y; 1.为什么属性的key必须是 ...

  4. python排序算法之冒泡,选择,插入

    1.参考 一本关于排序算法的 GitBook 在线书籍 <十大经典排序算法>,使用 JavaScript & Python & Go 实现 2.冒泡排序:两两比较,互换位置 ...

  5. C语言之字符、整数、数组、字符串笔记

    菜单导航 1.变量在计算中的内存分配 2.字符char类型操作 3.整型数据类型操作 4.数组操作和元素地址分配分析 5.数组越界造成的访问不属于自己的内存空间现象 6.引用数据类型和基本数据类型,形 ...

  6. 【Android】Bitmap加载图片错误 java.lang.OutOfMemoryError: bitmap size exceeds VM budget

    今天测试程序的时候出现下面的错误日志信息,程序当场挂掉 07-09 14:11:25.434: W/System.err(4890): java.lang.OutOfMemoryError: bitm ...

  7. Codeforces 342D Xenia and Dominoes 状压dp

    码就完事了. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define ...

  8. 068 mapWithState函数的讲解

    1.问题 主要是updateStateByKey的问题 有的值不需要变化的时候,还会再打印出来. 每个批次的数据都会出现,如果向redis保存更新的时候,会把不需要变化的值也更新,这个不是我们需要的, ...

  9. 完全背包-hdu1114

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 题目描述: 代码实现: #include<cstdio> #include<i ...

  10. valueof toString

    valueof toString add(1)(2) // 3 add(1, 2, 3)(10) // 16 add(1)(2)(3)(4)(5) // 15 function add() { var ...