文章标题 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的)
- 文章标题 java集合框架学习(-)针对ArrayList和LinkedList的学习小结
- Java集合框架学习---1.ArrayList和LinkedList
- ArrayList,linkedList集合的学习
- JavaSE入门学习35:Java集合框架之List接口及其实现类ArrayList和LinkedList
- Java集合框架里ArrayList Vector和LinkedList的区别
- java集合框架04--ArrayList和LinkedList的区别
- JAVA学习【7】集合框架与Arraylist、Linkedlist、HashSet的基本用法
- Java 集合深入学习--ArrayList,LinkedList和Vector
- Java集合类学习之Arraylist、Linkedlist
- 集合类的学习--ArrayList vs LinkedList
- JAVA学习---集合系列---ArrayList、Vector和LinkedList等的差别
- 关于java集合(3)-ArrayList和LinkedList的区别
- Java集合-ArrayList和LinkedList
- java学习笔记6 ArrayList和LinkedList
- Java学习之ArrayList和LinkedList
- Java学习笔记-ArrayList(2)和LinkedList
- JAVA学习.JAVA集合类型Collection.List.ArrayList&LinkedList
- java(20130801)异常、集合、ArrayList和LinkedList的比较、Vector和ArrayList的异同
- Android第三方库学习清单
- Android Binder实现(史上第二强理解,没有第一)
- vi和vim编辑器
- APP测试崩溃
- JAVA关系模式之策略模式
- 文章标题 java集合框架学习(-)针对ArrayList和LinkedList的学习小结
- Java 并行程序设计模式 (Future 模式)
- git
- Spring MVC启动整体过程
- USACO-Section2.2 subset[DP]
- Logstash学习总结(三) FILTER应用实例
- 机器学习和数据挖掘(5):训练与测试
- PBOC规范研究之二、PBOC规范中,对于通讯速率的约定
- Codeforces Round #392 (Div. 2) C