理解集合框架---list集合【1】


首先我们先理解一下如下图:

在这里插入图片描述

1.认识了解Collection方法,迭代器(Iterator)

(1)查找了解接口Collection

在线api浏览器搜索:
http://tool.oschina.net/apidocs/apidoc?api=jdkh

(2)迭代器

举一个形象的例子:
把夹娃娃机比作集合;那么夹娃娃的钩子就可以看成集合中的迭代器;夹娃娃必须通过娃娃机内部的钩子;
而钩子的外挂、移动方式等等都不相同,所以只能定义一个规则,而这个规则就可以看成几何内部的一个迭代器接口Iterator;
怎么取迭代器(Iterator)里的容器
(子类具备父类所拥有的所有方法)
在这里插入图片描述
集合的remove方法与迭代器的remove方法的区别

1.在迭代器或者foreach循环删除的时候容易出现的常见问题
在这里插入图片描述
如果运行it.next()会打印23 28
在这里插入图片描述
取迭代器(Iterator)里的容器
—箭头代表迭代器(最开始创建时,迭代器是在最顶端)
it.hasNext()–在这个容器是否有元素(是否含有下一个元素)
箭头往下移
在这里插入图片描述
foreach循环删除
–移除后意味着后面的元素往前面移,则后面没有元素时会报角标越界异常
在这里插入图片描述
2.在迭代器中执行collection.remove方法
53行运行则是正确的
在这里插入图片描述
当前改变异常
本质上来说:这是一个并发问题(两个对象同时操作一个元素是有问题的)
在这里插入图片描述

2.集合框架List(ArrayList特有方法,特有迭代器,具体对象特点,增长因子论证)

(1)list特有的方法listIterator

http://tool.oschina.net/apidocs/apidoc?api=jdkh
有下标的容器
可以按照下标去取,删除等方式去操作容器的元素
【父类的引用只能调用父类的方法,如果是new ArrayList()方式调的是子类的实现方法】
在这里插入图片描述
输出打印:(it.hasPrevious代表上一个,如果没有30-32行代码直接找上一个元素会运行没有任何东西)
原理:list有下标

(2)具体对象特点

在这里插入图片描述
Collection
List : 有序 元素可以重复 因为该集合体系有索引
ArrayList : 数组结构 增删慢,查询快 有连续下标 线程不同步(看源码) 增长因子为0.5 10
Vector : 数组结构 增删改查都慢 有连续下标 线程同步(看源码) 增长因子2 10(淘汰原因:增长因子太大浪费空间)
LinkedList : 链表结构 增删快,查询慢 没有连续下标
Set : 无序 元素不可以重复
ArrayList与array的区别
1.list的长度可变,数组长度固定
2.list可以存放各类的元素对象,而数组一旦申明,只能存放对应的类型
ArrayList如何进行性能调优
为何list集合底层是数据结构,但是数组长度优势固定,而list长度又可变呢?
在这里插入图片描述
在这里插入图片描述
可变的原因是:一次次对底层的容器扩容

3.集合框架LinkedList

http://tool.oschina.net/apidocs/apidoc?api=jdkh
链表的数据结构
特有方法:(1)addFirst()
(2)addLast()
通过LinkedList集合来制作一个堆栈结构的容器
获取制作一个队列结构的容器

在这里插入图片描述

堆栈

在这里插入图片描述
在这里插入图片描述
输出:abcde

队列

在这里插入图片描述
在这里插入图片描述
输出:abcde

4.集合框架ArrayList中的重复元素去重及其底层原理

(1)元素是字符串
(2)元素是自定义对象
ArrayList al这容器中是否有重复元素?
(1)建立一个新的容器
(2)将老的容器遍历取出其中的元素
(3)如果说这个元素存在于新容器中,那么不再往新容器加入。如果不存在,就加。
在这里插入图片描述
元素是自定义对象
需求:判定两个人是同一个人的依据:
名字相同年龄相同
在这里插入图片描述
Repeat去重复方法无效
如下图分析理解:这六行代码在内存做了什么事
在这里插入图片描述
集合collection的contains在调用的时候底层调用容器元素对象的equals方法
之前元素对象是String (contains方法能够对比字符串是因为String已经重写了equals方法,不能对比自定义对象是因为还用于Object)
元素对象Object(Person)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值