java学习(4)-- 集合类

一、集合类组成架构

 

二、ArrayList、LinkedList、Vector 的区别

1)首先普及一基础知识,数组和链表

         数组和链表都是线性表(数据成线性排列),只有前后两个方向;

         数组是连续的内存空间、存储相同的数据类型;

         链表是可以非连续的内存空间存储相同的数据类型;

2)简单说一下ArrayList、LinkedList、Vector 的区别

       ArrayList:线程不安全数组,随机查询快,增删慢;

       LinkedList:线程不安全的双向链表封装,每个节点包含上一个节点信息和下一个节点信息,查询慢,增删快;

       Vector:线程安全数组,随机查询快,增删慢; Vector本身所有方法都是用synchronized修饰的,所以线程安全,而ArrayList没有

三、synchronizedlist和vector的区别

1) 数据增长有区别

2)同步代码块和同步方法的区别,vector同步方法。synchronizedlist同步代码块

四、Hashtable、HashMap、ConcurrentHashMap区别

1)Hashtable:底层数组+链表 线程安全、不允许KEY,VALUE都不允许为NULL,线程安全实现方式synchronized锁住整个Hashtable;

2)HashMap:底层数组+链表 线程不安全,运行空键和空值。

3)ConcurrentHashMap 底层数组+链表 线程安全 使用 synchronized 分段锁住 hash表,效率较高

五、Set 和 List 的区别

相同点:

           1) 都实现了collection接口

不同点:

           1)List 有序、允许重复、允许多个NULL值

           2)Set 无序、不允许重复、只允许一个NULL值

六、Set 如何保证元素不重复

使用hashCode加equals 重复验证添加;

七、Java 8 stream的详细用法

https://blog.csdn.net/y_k_y/article/details/84633001

八、Apache的集合工具类的使用

https://www.cnblogs.com/crazylqy/p/4872236.html

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

https://blog.csdn.net/YingHuaNanHai/article/details/81273218

十、collection和collections的区别

collection:是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。

collections:Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

十一、Arrays.asList()方法使用需要注意什么

首先,该方法是将数组转化为list。有以下几点需要注意:

  (1)该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean)

  (2)该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新

  (3)不支持add和remove方法

十二、enumeration和iterator的区别

           1)java中的集合类都提供了返回Iterator的方法,就是迭代器,它和Enumeration的主要区别其实就是Iterator可以删除元素,但是Enumration却不能。

           2) 还有一点要注意的就是,使用Iterator来遍历集合时,应使用Iterator的remove()方法来删除集合中的元素,使用集合的remove()方法将抛出ConncurrentModificationException异常。

           3) Enumeration 与 iterator 都是迭代输出的方法,Enumeration先进后出,iterator先进先出

十三、fail-fast和fail-safe

fail-fast:fail-fast机制在遍历一个集合时,当集合结构被修改,会抛出Concurrent Modification Exception。

单线程环境和多线程环境

fail-safe:任何对集合结构的修改都会在一个复制的集合上进行修改,因此不会抛出ConcurrentModificationException

fail-safe机制有两个问题

(1)需要复制集合,产生大量的无效对象,开销大

(2)无法保证读取的数据是目前原始数据结构中的数据。

十四、CopyOnWriteArrayList

         Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。

       CopyOnWrite并发容器用于读多写少的并发场

       缺点:

             1. 内存占用问题 :因为CopyOnWrite的写时复制机制,所以在进行写操作的时候,内存里会同时驻扎两个对象的内存,旧的对象和新写入的对象

             2. 数据一致性问题:CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性。

十五、ConcurrentSkipListMap

1)TreeMap使用红黑树按照key的顺序(自然顺序、自定义顺序)来使得键值对有序存储但是只能在单线程下安全使用;多线程下想要使键值对按照key的顺序来存储,则需要使用ConcurrentSkipListMap。

2)ConcurrentSkipListMap的底层是通过跳表来实现的。跳表是一个链表,但是通过使用“跳跃式”查找的方式使得插入、读取数据时复杂度变成了O(logn)。

 

其他信息请查看专栏:https://blog.csdn.net/u012547633/column/info/39075

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值