本篇文章将尝试回答一些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. md

    > 引用# 一级标题## 二级标题,总共六级标题 - ul + li + li 1. 1232. 456 [链接](http://www.baidu.com) ![图片](http://plac ...

  2. sql server使用sql语句上传Excel到数据库

    USE pro GO SELECT  * INTO   temp_budget_price@201704170950 FROM    OPENDATASOURCE('Microsoft.Jet.OLE ...

  3. POSIX信号量

    DESCRIPTION POSIX 信号量允许进程间和线程间同步他们的操作. 一个信号量是一个整型(integer),其值不能小于0. 信号量允许2中操作:给信号量的值加1(sem_post); 给信 ...

  4. Centos6.5系统关闭防火墙

    关闭Centos6.5系统防火墙步骤: 1.命令:service iptables stop //停止正在运行的防火墙服务 2.命令:chkconfig iptables off //永久关闭防火墙 ...

  5. C++11 带来的新特性 (1)

    1 语法改进 1.1 模板表达式中的空格 在c++03 及以前 vector<list<int>>; //Error vector<list<int> > ...

  6. Axure RP 8 软件介绍

    介绍 此软件可以用于制作快速原型,也可以绘制中保真原型草图. 应用人群:产品经理.交互设计师.UI设计师.网页设计师. 原型分类:低保真(手绘草图).中保真(使用相关软件绘制出来的).高保真(包含效果 ...

  7. java位移运算符2 转

    https://blog.csdn.net/xxx134617/article/details/7454774 java中int类型占4个字节,二进制用补码表示: 3的二进制表示: 00000000 ...

  8. PC端问题列表及解决方案

    一.CSS相关 1.PC站百度文件引用不到,出现报错,问题可能是电脑拦截了百度广告. 解决方案:把拦截广告的浏览器插件关掉. 2.ie6双倍边距:在使用了float的情况下,不管是向左还是向右都会出现 ...

  9. Exp1 PC平台逆向破解 20164302 王一帆

    1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程 ...

  10. Linux 下的两个特殊的文件 -- /dev/null 和 /dev/zero 简介及对比

    1.概论 -- 来自维基的解释 /dev/null  : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一 ...