文章标题 java集合框架学习(-)针对ArrayList和LinkedList的学习小结

来源:互联网 发布:移动医疗软件 编辑:程序博客网 时间:2024/06/06 03:56

讲一下对java集合框架的理解
JCF(Java Collections Framework)为Java开发者提供了通用的容器,容器里存放不同的对象引用,用户在使用时通过相应的容器接口便能实例化具体的对象,调用对象已经封装好的方法实现相关操作。主要由一些接口和类组成,比较重要的是List,Set和Map这三种接口,其中List和Set是Collection接口的两个子接口。
放上一张精彩的图片供参考:
这里写图片描述
可以看到JCF有两个主要的接口Collection接口和MAP接口组成,这两个接口下又提供了Set、List、Queue和SortedMap等重要的接口,每个接口下又有具体的集合类,see!
这里写图片描述
看到这相信大家已经对集合以及集合类有了一定了解,接下来让我们先从set接口两个重要的集合类ArrayList和LinkedList说起吧,准备好了吗,go!
首先,ArrayList,可以理解为基于数组的线性表,以数组作为存储的数据结构,实现起来比较简单,以下标为依据实现随机查找和遍历,时间复杂度为O(1),因此查询速度快;但进行插入删除时需要移动一些元素,增删慢。初始化时,如果没有指定表长,默认为10。每次add操作是先进行ensureCapacity操作,如果需要扩容,就将新的capacity增加原来的容量的一半,然后调用Arrays.copyof操作将原来的数组元素elementData复制到新的空间。
LinkedList实现的数据结构是一个双向的循环链表,增删快,只需要修改前端和后继的指向即可;但是每次查询时要从头一个个的比较遍历,因此查询速度相对较慢,时间复杂度为O(n);进行add操作时分两种情况,具体文档上有,主要是对结点进行操作。
查阅相关资料知,ArrayList和LinkedList均是线程不安全的,就是说如果有多个线程都想进行某一操作(比如添加一个元素),系统不能实现同步处理(跟进程中顺序操作不当会造成结果的不可再现性有点类似吧),然后出现逻辑错误就会抛出异常。解决的方法有两个,第一个是采用Collections.synchronizedList()方法对其进行包装,使多个进程之间实现同步。第二个是采用Vector,它是一个支持动态增长的数组(以前做密码学编程的时候用到过),支持同步机制,但是速度总体上没有AarryList快,扩容操作时容量会增加一倍。
就使用环境来说的话,如果查询操作较多,ArrayList是最适合的,采用数组实现起来比较简单;如果增删操作较多,那就要采用链表机制的LinkedList;如果系统中设计多线程操作较多,可以考虑使用Vector。
写到这的时候都要累的吐血了,开玩笑的哈!我综合了一些面试题有关这两个集合类的知识点和一些精彩的文章,提炼出来了这几点,希望能让和我一样的初学者做一个近似全面的理解。
掌握了这些知识点是远远不够的,学长说对具体的数据结构、算法的实现最好也要清楚,具体的插入、删除、遍历等操作这里附上一个链接,想深入了解的可以进一步参考:
https://github.com/CarpenterLee/JCFInternals/blob/master/markdown/2-ArrayList.md(这是有关Arraylist的)
https://github.com/CarpenterLee/JCFInternals/blob/master/markdown/3-LinkedList.md(这是有关LinkedList的)

阅读全文
1 0
原创粉丝点击