Java集合类常见的问题
本篇文章将尝试回答一些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集合类常见的问题的更多相关文章
- Java集合类常见面试知识点总结
微信公众号[Java技术江湖]一位阿里Java工程师的技术小站 Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾. 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java ...
- Java集合类中的哈希总结
JAVA集合类中的哈希总结 目 录 1.哈希表 2.Hashtable.HashMap.ConcurrentHashMap.LinkedHashMap.TreeMap区别 3.Hashtable.Ha ...
- Java集合类: Set、List、Map、Queue使用场景梳理
本文主要关注Java编程中涉及到的各种集合类,以及它们的使用场景 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E ...
- Java集合类: Set、List、Map、Queue使用
目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的 ...
- 基础知识《六》---Java集合类: Set、List、Map、Queue使用场景梳理
本文转载自LittleHann 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E6%8E%92%E5%BA%8F% ...
- java集合类(五)About Map
接上篇“java集合类(四)About Set” 这次学完Map之后,就剩队列的知识,之后有关java集合类的学习就将告一段落,之后可能会有java连接数据库,I/O,多线程,网络编程或Android ...
- java集合类(四)About Set
接上篇:java集合类(三)About Iterator & Vector(Stack) 之前,在比较java常见集合类的时候,就了解到一点有关Set的特性.实现类及其要求等,读者可以去温习下 ...
- java异常常见面试问题
java异常常见面试问题 一.java异常的理解 异常主要是处理编译期不能捕获的错误.出现问题时能继续顺利执行下去,而不导致程序终止,确保程序的健壮性. 处理过程:产生异常状态时,如果当前的conte ...
- Java语法总结--Java集合类
这一节我们来总结一下Java集合类. Java集合总结 继承与Collection接口的–List接口 List接口本身的特点 常见的继承List接口的实用类 实用类对比 继承与Collection接 ...
随机推荐
- C# DataConstruct 数据结构关于 Array,ArrayList,List,HashTable,Dictionnary的学习记录
Array: 数组,开辟连续存储的内存存储数据.Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据 优点: 1.查询速度快,可以利用索引快速查询到对 ...
- pyqt win32发送QQ消息
标题应该改为:python+win32发送QQ消息,全程使用python套个pyqt壳. 其实代码来自: http://blog.csdn.net/suzyu12345/article/details ...
- 不可不知的表达式树(1)Expression初探
说起Lambda表达式,大家基本都很熟悉了,而表达式树(Expression Trees),则属于80%的工作中往往都用不到的那种技术,所以即便不是什么新技术,很多人对其理解都并不透彻.此文意图从表达 ...
- docker容器时间与宿主机时间不一致问题
该问题是宿主机和容器时去不一致导致的. 把本机时区复制到宿主机即可: docker cp /etc/localtime a9c27487faf4:/etc/localtime 然后重启容器.
- UOJ#346. 【清华集训2017】某位歌姬的故事 动态规划
原文链接www.cnblogs.com/zhouzhendong/p/UOJ346.html 题解 首先按照 $m_i$ 的大小排个序. 如果某一个区间和一个 m 值比他小的区间有交,那么显然可以将这 ...
- Nginx upstream的5种权重分配方式分享
Nginx负载均衡的分发方式有4种: 1.轮询,默认采取此方式,Nginx会按照请求时间的先后顺序进行轮询分发,若某台Web Server宕机,Nginx自动将其摘掉. 2.weight,权重,即轮询 ...
- java使用Jedis远程访问CentOs7linux时出现拒绝连接的错误
使用Jedis出现Connection refused的解决方案 当我们利用Jedis操作服务器的Redis数据库时,需要先将远程服务器的端口(默认端口是6379)开放,命令如下: #/sbin/ ...
- 理解WindowManagerService
--摘自<Android进阶解密> *WMS的职责* 1)窗口管理 WMS负责窗口的启动.添加和删除,另外窗口的大小和层级也是由WMS进行管理的 2)窗口动画 WMS的动画子系统Windo ...
- Nginx status详解
1. 启用nginx status配置 server { listen *:80 default_server; server_name _; locatio ...
- docker-compose模板文件参数说明
working_dir:一般这个参数用在应用程序Services下,我们指定应用程序所在的目录为当前目录,类似linux中的cd working_dir.其余的参数,例如command等就是基于此参数 ...