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

讲一下对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的)

Stkcd [股票代码] ShortName [股票简称] Accper [统计截止日期] Typrep [报表类型编码] Indcd [行业代码] Indnme [行业名称] Source [公告来源] F060101B [净利润现金净含量] F060101C [净利润现金净含量TTM] F060201B [营业收入现金含量] F060201C [营业收入现金含量TTM] F060301B [营业收入现金净含量] F060301C [营业收入现金净含量TTM] F060401B [营业利润现金净含量] F060401C [营业利润现金净含量TTM] F060901B [筹资活动债权人现金净流量] F060901C [筹资活动债权人现金净流量TTM] F061001B [筹资活动股东现金净流量] F061001C [筹资活动股东现金净流量TTM] F061201B [折旧摊销] F061201C [折旧摊销TTM] F061301B [公司现金流1] F061302B [公司现金流2] F061301C [公司现金流TTM1] F061302C [公司现金流TTM2] F061401B [股权现金流1] F061402B [股权现金流2] F061401C [股权现金流TTM1] F061402C [股权现金流TTM2] F061501B [公司自由现金流(原有)] F061601B [股权自由现金流(原有)] F061701B [全部现金回收率] F061801B [营运指数] F061901B [资本支出与折旧摊销比] F062001B [现金适合比率] F062101B [现金再投资比率] F062201B [现金满足投资比率] F062301B [股权自由现金流] F062401B [企业自由现金流] Indcd1 [行业代码1] Indnme1 [行业名称1] 季度数据,所有沪深北上市公司的 分别包含excel、dta数据文件格式及其说明,便于不同软件工具对数据的分析应用 数据来源:基于上市公司年报及公告数据整理,或相关证券交易所、各部委、省、市数据 数据范围:基于沪深北证上市公司 A股(主板、中小企业板、创业板、科创板等)数据整理计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值