本文主要是介绍简谈集合框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简谈集合框架(一)
灵活思考,学会类比,举一反三,方能学好知识,成就精彩人生。
**
首先,对于集合框架这一大的概念,我们肯定也是有点模糊的,因此此次,我从集合框架的简介,Collection方法,迭代器三个方面入手,层层分析,一一破解。
简介
集合框架的由来:数据多了用对象进行存储,对象多了用集合来进行存储。
而存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系。
而其中的部分数据结构如下:
通过此图可知,研究集合框架,一部分框架是由list组成,一部分是由set构成,当然还有一部分在此文没有提到,在以后会补充。
观察此图,我们可以把list比作盛水的容器,把set比作放糖果的盒子,然后我们就可以观察出,它们都有一个共性,就是存储Collection
之后,我们便从这一点共性下手研究(打蛇打七寸,有了明确方向,才能达到事半功倍效果)
Collection方法
Collection方法,可以通过我下面推荐的这个网站去探讨,钻研。Api在线学习文档
迭代器
啥叫迭代器?
集合框架中提供了一个内部类专门操作集合中的元素,这个内部类就是迭代器
再举一个形象的例子:
把夹娃娃机比作集合;那么夹娃娃的钩子就可以看成集合中的迭代器;夹娃娃必须通过娃娃机内部的钩子;
而钩子的外挂、移动方式等等都不相同,所以只能定义一个规则,而这个规则就可以看成几何内部的一个迭代器接口Iterator;
在这里,我还想提到的是,在我们钻研某一知识的时候,我们一定不能死板,要学会和生活中的一些现象联系起来,学会类比,我们也可以通过绘图来使我们思路清晰化,这属实是屡试不爽。
集合框架List
在此,本篇会讲到
(ArrayList特有方法、特有迭代器、具体对象特点、增长因子论证)
重点来了 本篇中将涉及
职场面试题
天生我材必有用,人不可貌相,海水不可斗量!
- 1、list集合相对于collection集合所特有的方法
- 2、Iterator.remove()与Collection.remove()的区别
- 3、Iterator与ListIterator的区别
Iterator.remove()与Collection.remove()的区别
面试中我们常常会被问到:看下面代码,我想删除第二个,然后再展示出来,代码这样写对不对?
当然上面的报错代码,是我们后期加上去的,这样写肯定不对!报错显示结果是:数组当前改变异常。
根本原因是:
当所有元素在迭代器里面 用其他方法去操作就会出现并发问题—弄巧成拙—导致报错
所以 要么就只用集合方法操作 要么就用迭代器方法调用
(list集合所特有的迭代器,ListIterator是Iterator的子接口
* 在迭代时,不可以通过集合对象的方法操作集合中的元素;
* 因为会发生并发修改异常(ConcurrentModificationException);
* 所以,在迭代时,只能通过迭代器来操作元素,课时Iterator的方法是有限的,Iterator只提供了判断、
* 取出、删除的操作;
* 如果想要有其他的操作,如添加、修改等,就需要使用其子接口ListIterator,该接口只能list集合的listIterator方法来获取)
下面是正确方法:
list集合相对于collection集合所特有的方法
讲到这里,我们首先得知道,list特有的东西:独立不同的方法 ;索引list 可以得知 有下标的都是list
特有的方法
因为list有序 有下标(知道位置在哪里了,肯定是清晰的了)
必然会有其特有的迭代器 更多方法 操作。
List:凡是可以操作角标的方法都是该体系所特有的方法
* 增
* Add(index,element)
* Add(index,Collection)
*
* 删
* Remove(index)
*
* 改
* Set(index,element)
*
* 查
* Get(index)
* subList(from,to)
* listIterator()
* index(element)等
其中特有的方法,我们可以去上面的链接进行研究,扩充我们的知识面。
List 有序 元素可以重复 因为该集合体系有索引
Set 无序 元素不可以重复
Iterator与ListIterator的区别
怎么使用迭代器:(面试题;我想取出它们的偶数部分,代码这样写对不对?)
刚开始使用迭代器的时候,其在最顶上(图中箭头),就当进入循坏的时候,
语句(it.hasnext())刚好符合,且进入下一步(it.next%2==0)也是符合
,因此打印的是第二个,以此类推,打印第四个。所以由图可知打印第2,4个
因此我们要仔细思考,小心入坑,在我们理解集合的数据结构后,
其万坑不离其综,形变神不变,方能轻松面对,笑傲职场!~
迭代器不管调用什么方法,其顺序都是从上往下
面试题:(怎么让迭代器顺序从下往上)
解决:先让迭代器顺序从上往下打印一遍,
紧接着调用(itr.hasPrevious())
方法,就可以达到理想效果了。
Arraylist,vector,Linkedlist特点是什么
面试题(特点是什么)
Arraylist 数组结构 增删慢,查询快 有连续下标 线程不同步 增长因子为1.5 ------------根据下标找 查询肯定块,但插入 删除 要先找到位置 在挪开 影响位置是起
多米诺骨牌效应的,因此速度慢了起来。
* vector 数组结构 增删改查都慢 有连续下标 线程同步 增长因子2
增长因子可得知arraylist更好 合理空间 没有较多的浪费
* Linkedlist 链表结构 增删快,查询慢 没有连续下标
linkedlist 是链表结构的,相当于该位置(Node node)只要记住前面
(Node previous) 后面(Node next)位置,因此影响小,插入,删除速度快,
但与此同时,查找速度慢。
如何论证增长因子
关于如何论证增长因子,本篇将给出如下代码供大家查阅:
如何调优
list集合的调优:增长因子是不是1.5
其次我们可以改变初始容量参数,来进行调优
小伙伴们,本次小t分享的内容就到这里啦,感谢观看!
这篇关于简谈集合框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!