本篇文章将尝试回答一些Java集合类常见的问题,以作知识梳理之用。

ArrayList和LinkList以及Vector的区别

就实现方式而言:

  • ArrayList是以数组的方式实现的列表。

  • LinkList是以双向链表的形式实现的列表。

  • Vector也是以数组的方式实现的列表,但Vector是一个采用了同步技术的线程安全的列表。

就使用场景而言:

  • ArrayList适合于随机查询要求比较多的场景,因为其内部实现是一个数组,所以可以快速定位元素的位置。它的缺点是不适合插入删除操作,其原因是因为Java的数组是静态的。这两种操作需要对数组进行调整,其中不可避免的是需要调整元素的位置,这一操作只能通过数组拷贝的形式来完成,效率较低,如果遇上要扩容的情况,效率会更加的低。因此,如果能够在实例化ArrayList的时候传入所需的容量大小,减少扩容的操作,可以提高不少效率。

  • LinkList适用于需要频繁插入删除操作的节点,因为其实现方式是通过链表的形式,不用进行类似于ArrayList数组拷贝以及元素位置的调整,只需要调整节点的前驱指针和后继指针即可。其缺点是不适合频繁的随机查询,因为链表的查询是通过从头节点开始遍历匹配,因此性能较差。

  • Vector几乎和ArrayList差不多,只不过它是一个线程安全的列表,但由于它大量使用同步的方式来维护线程安全,因此效率很低,一般不推荐使用。

SynchronizedList和Vector的区别

SynchronizedList的实现方式是通过同步代码块的形式实现同步,而Vector使用的是同步方法,效率上而言,Vector的效率要低一些。

此外,SynchronizedList的扩展性和灵活性很好,它可以将所有的List的子类转化为线程安全的类,同时可以指定锁的对象。不过,使用SynchronizedList的时候,进行遍历时要手动进行同步处理,因为SynchronizedList的iterator并没有进行同步。

HashMap、HashTable、ConcurrentHashMap区别

这三个数据类型都实现了Map接口,本质上的功能差别不大,除了HashTable不可以接受null之外。

它们最大的区别是在线程安全方面,HashMap、HashTable的线程安全性就好像,ArrayList和Vector一样,HashTable是一个使用同步方式来维护线程安全的Map,效率比HashMap要低上许多。ConcurrentHashMap是另一个线程安全的Map,它的内部采用了分段锁的机制,使得它的效率比HashTable高上不少,同时还可以保证线程安全。

Set和List区别,Set如何保证元素不重复

Set中不要求元素按顺序进行存储,且不允许存储相同的元素,而List则不可以。从Set的实现来看,其内部维护了一个Map来存储元素,元素是作为Map的Key存储的。Map会通过比较元素的hashcode以及equals来判断是否是同一个对象,因此Set可以保证元素不重复。

不同版本的JDK中HashMap的实现区别以及原因

在JDK1.7版本的HashMap中,如果遇到hash值相同的元素之后,会使用链表来将元素链接起来。然而,在JDK1.8中,为了提升查询的效率,当hash值相同的元素达到一定数量的时候,会采用红黑树的方式来存储元素。

Collection和Collections的区别

Collection是一个接口,里面定义了一组数据结构的操作,Java中的集合类都实现了这个接口。Collections是一个工具类,有一些常用的对集合的操作,比如toArray这些方法。

Arrays.asList获得的List使用时需要注意什么

使用Arrays.asList获得的集合,不能对其进行增删改操作。asList返回的是一个Arrays的内部类对象,并没有实现增删改操作。该方法体现的是适配器模式,只是转换接口,实际上数据仍然是数组。

 

Java集合类常见的问题的更多相关文章

  1. Java集合类常见面试知识点总结

    微信公众号[Java技术江湖]一位阿里Java工程师的技术小站 Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾. 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java ...

  2. Java集合类中的哈希总结

    JAVA集合类中的哈希总结 目 录 1.哈希表 2.Hashtable.HashMap.ConcurrentHashMap.LinkedHashMap.TreeMap区别 3.Hashtable.Ha ...

  3. Java集合类: Set、List、Map、Queue使用场景梳理

    本文主要关注Java编程中涉及到的各种集合类,以及它们的使用场景 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E ...

  4. Java集合类: Set、List、Map、Queue使用

    目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的 ...

  5. 基础知识《六》---Java集合类: Set、List、Map、Queue使用场景梳理

    本文转载自LittleHann 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E6%8E%92%E5%BA%8F% ...

  6. java集合类(五)About Map

    接上篇“java集合类(四)About Set” 这次学完Map之后,就剩队列的知识,之后有关java集合类的学习就将告一段落,之后可能会有java连接数据库,I/O,多线程,网络编程或Android ...

  7. java集合类(四)About Set

    接上篇:java集合类(三)About Iterator & Vector(Stack) 之前,在比较java常见集合类的时候,就了解到一点有关Set的特性.实现类及其要求等,读者可以去温习下 ...

  8. java异常常见面试问题

    java异常常见面试问题 一.java异常的理解 异常主要是处理编译期不能捕获的错误.出现问题时能继续顺利执行下去,而不导致程序终止,确保程序的健壮性. 处理过程:产生异常状态时,如果当前的conte ...

  9. Java语法总结--Java集合类

    这一节我们来总结一下Java集合类. Java集合总结 继承与Collection接口的–List接口 List接口本身的特点 常见的继承List接口的实用类 实用类对比 继承与Collection接 ...

随机推荐

  1. [转] 如何设置双网卡同时连接内网外网_bpao_新浪博客

    已剪辑自: http://blog.sina.com.cn/s/blog_5d3e229c0100skwe.html 如何设置双网卡同时连接内网外网 . 通过无线网络连接外网,确保连接成功后开始第二步 ...

  2. unity skybox天空盒分享无需下载

    大概有几十种还是100种,具体忘了 反正很多就是了(哈哈哈哈哈!!!!!!!!!!!!) 老铁们, 多谢支持,谢谢大家. 根据需要使用,下面会分享出下载链接: 链接:https://pan.baidu ...

  3. linux学习--2019-04-22

    1.写命令,vi编辑器 1)vi 文件名 2) 按 ‘i’ 进入编辑模式 3)编写完成后,按Esc,然后输入 “:wq” 推出编辑.(“q!”不存盘,强制退出vi) 2.命令补全 “Tab” 3.获取 ...

  4. POJ 3268 (dijkstra变形)

    题目链接 :http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveni ...

  5. 蓝桥杯刷题,第四界省赛B组

    题头,本内容的题目和部分内容均来自博客:https://blog.csdn.net/ryo_218/article/details/79704030 ,在此感谢. 1. 题目标题:高斯日记大数学家高斯 ...

  6. CF741C.Arpa’s overnight party and Mehrdad’s silent entering [构造 二分图染色]

    CF741C - Arpa's overnight party and Mehrdad's silent entering 题意: 有 n 对情侣坐成一个圈,有两种食物Kooft and Zahre- ...

  7. webstorm2018.2.3激活

    一,简介 WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.目前已经被广大中国JS开发者誉为"Web前端开发神器"."最强大的HTML5编 ...

  8. go 统计目录大小

    文件大小获取 // 这里获取的是 FileInfo 对象 fi, _ := os.Stat(filepath) FileInfo 定义如下: type FileInfo interface { Nam ...

  9. java中的异常(一)

    java异常的概念 执行期的错误(javac xxx.java) 运行期的错误(java xxx) 这里讲的是运行期出现的错误 class TestEx { public static void ma ...

  10. Pytorch多GPU训练

    Pytorch多GPU训练 临近放假, 服务器上的GPU好多空闲, 博主顺便研究了一下如何用多卡同时训练 原理 多卡训练的基本过程 首先把模型加载到一个主设备 把模型只读复制到多个设备 把大的batc ...