黑马程序员---集合体系的继承关系图。顶层接口Collection中的方法,迭代器Iterator使用和原理,List派系特点
来源:互联网 发布:听歌识曲哪个软件好 编辑:程序博客网 时间:2024/05/17 09:00
- ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------
1. 第十六天学习内容,对象数组,集合由来,集合数组的区别。集合体系的继承关系图。顶层接口Collection中的方法,迭代器Iterator使用和原理,List派系特点,List派系的特有内容,特有方法,特有迭代器,ArrayList类的特点和使用。
2. 对象数组
学生对象,姓名和成绩,存储起来,把学生对象存储到数组中。
数组中存储基本数据类型,数组中存储的是引用类型,学生对象
其中的弊端!长度
3. 集合的由来,特点
由于对象数组弱点就是长度的固定。为了解决问题,Java从JDK1.2版本开始,开发出来集合框架,处理掉对象数组的问题。集合长度是可变的。
数组可以存储基本类型,存储对象
但是,集合只存储对象,不收基本数据类型
数组和集合都是容器:基本数据多了存数组,对象太多存集合
4. 数组和集合的区别
数组定长
集合变长
数组存储类型单一
集合存储任意对象
数组存储基本类型,对象
集合只存储对象
5. 学习集合框架,学习的是什么
学习的集合中每一个容器的特点,怎么存储对象,怎么取出来
如果你掌握了每一个容器自身特点,会存储存储对象,会把对象从集合中取出来
6. 顶层接口Collection的方法
集合中的顶层接口,所有的抽象方法,下面的子类,或者子接口都是具备的
接口方法都是抽象的,找实现类ArrayList,是接口指向实现类,运行的方法都是实现类重写后的方法
l add(Object o)将元素添加到集合,存储到集合
l addAll(Collection c)参数是一个集合,把一个集合存储到另一个集合
l void clear()清除集合中的所有对象,但是集合容器还在
l int size()返回集合中存储元素的个数
l boolean isEmpty()如果集合中元素个数是0,返回true
l boolean contains(Object o)判断集合中是不是包含这个对象,如果包含返回true
l boolean containsAll(Collection c)一个集合是否完全包含另一个集合,是集合中存储的对象,如果完全包含,返回true
l boolean remove(Object o)移除集合中的元素,移除成功返回true
l boolean removeAll(Collection c)移除两个集合中相同的元素
l booean retainAll(Collection c)获取两个集合的交集
l toArray()集合转成数组,Arrays asList集合转数组
l Iterator iterator()获取迭代器对象
7. 迭代器
迭代器就是从集合中取出元素的方式
但是每种集合子类存储对象的方式不同,造成获取对象的方式也不同,因此规定了一个接口(Iterator)所有子类的迭代器必须满足接口的规则
Iterator iterator()方法是获取迭代器对象的方法,返回值是一个接口,返回的是这个接口的实现类的对象
Iterator接口---图,就是摇杆
iterator()--投币
夹子,或者是铲子,--就是接口的实现类,实现类其实是容器中的内部类.
每一个集合子类中,都有个方法 iterator(),返回的就是自己内部类的对象,但是这个内部类实现了Iterator接口
Iterator接口中的方法
boolean hasNext()判断集合中有没有下一个被取出的元素,有返回true
Object next()获取集合中班的下一个元素
void remove()移除元素,是迭代过程中移除
迭代器的实现源码--ArrayList为演示
public classArrayList extends XXX implements List{
publicIterator iterator(){
returnnew Itr();
}
privateclass Itr implements Iterator{
publicboolean hasNext(){}
publicObject next(){}
publicvoid remove(){}
}
}
使用内部类对象,直接调用不行,内部类是私有修饰,通过iterator方法获取接口Iterator的实现类的对象
Iterator it = ArrayList对象.iterator();
使用迭代器取出集合中存储元素的三个步骤:
l 调用集合方法iterator()获取迭代器接口的实现类对象
l 调用接口Iterator方法hasNext()判断集合中有没有下一个元素
l 调用接口Iterator方法next()获取集合中的元素
8. 迭代器获取集合元素的注意事项
l 如果hasNext()判断为false,还用next()获取,出现没有元素被取出异常
l 在迭代的过程中,不允许使用集合的方法改变集合长度,出现并发修改异常
l 迭代器创建好以后,只能迭代一次
l 一次迭代中,不允许出现多次next方法
9. 迭代器方法remove
迭代过程中,删除元素,方法是迭代器方法,不是集合方法,因此不会出现并发修改异常
void remove()删除的是谁,next()方法获取到的是谁,remove删除的就是谁
10. List接口派系
List接口继承Collection接口,自己成立一个派系
List列表,清单,派系特点:有序,重复,下标
l 存储有序的。顺序:怎么存储的,怎么取出来
l 允许存储重复元素
l List集合中的元素都是有下标的
11. List接口特有方法
l void add(int index,Object o)在列表的指定位置上插入元素
l boolean addAll(int index,Collection c)在列表的指定位置上插入另一个集合
l Object get(int index)返回指定索引上的元素!
l Object remove(int index)移除指定下标上的元素,返回移除前的对象
l Object set(int index,Object o)修改指定下标上的元素,返回修改前的元素
l List subList(int start,int end)获取集合中的一部分,包含头,不包含尾,返回新集合
12. List派系特有迭代器
迭代器只能应用于List集合,其他集合不能用
List特有迭代器接口ListIterator,这个接口是Iterator的子接口
List的派系的每一个子类,都有一个方法listIterator,返回ListIterator接口的实现类对象,这个实现类,就是集合的内部类。
特点:迭代中,可以使用迭代器方法,进行添加,修改,删除集合中的元素,两个方向遍历
ListIterator接口方法
add(Object)添加,迭代到哪个对象,添加到这个对象的后面
set(Object)修改,迭代到哪个对象,修改的就是哪个对象
remove()删除
hasPrevious() == hasNext() 逆向使用
previous() == next() 逆向使用
13. ArrayList类
容器的底层实现方式,可变长度数组(扩容,自动复制数组),数组默认大小10个长度。
线程不安全集合,运行速度快。查询速度快,增删慢
每次增长50%。
ArrayList使用的频率最高,速度快,查询也快
14. ArrayList练习
去掉ArrayList中的重复对象
array.add(123);array.add(123)
集合本身是允许重复的,自己写一个功能,重复的去掉
实现思路:借用一个集合实现功能
原始集合,新集合是空的
使用迭代器迭代原始集合
从原始集合中分别取出每一个对象,
获取出的对象,看看他包含不包含在新集合中,如果包含,什么也不用做,如果不包含就把这个对象,存储到新集合中。原始集合迭代完成,新集合中存储的就是原始集合去掉重复对象后的结果
- 黑马程序员---集合体系的继承关系图。顶层接口Collection中的方法,迭代器Iterator使用和原理,List派系特点
- 『黑马程序员』---java--集合--Collection概念+List派系
- 黑马程序员 集合List接口的特点
- 黑马程序员:Java基础——List集合共性方法,Iterator迭代和集合具体对象的特点
- 黑马程序员----Set集合,Set派系的特点,Set接口方法,HashSet集合,对象的哈希值,TreeSet二叉树的排序效果
- 黑马程序员---Java中的集合(二)--List派系
- 黑马程序员——集合取方法和异常的继承体系
- 黑马程序员 集合Collection和List及三个子类的方法介绍
- 黑马程序员_两种遍历集合的方法Iterator接口和foreach循环
- 黑马程序员—集合框架Collection接口与List接口
- 黑马程序员_继承体系和接口体系
- 黑马程序员-集合类Collection之List接口
- 黑马程序员---集合-Collection,List
- java集合(1):集合框架体系之Collection接口及迭代器Iterator接口
- 黑马程序员_集合框架(Collection,Iterator)
- 黑马程序员-集合框架Collection List Set 接口的简单介绍
- 个人对List接口中的iterator方法的使用了解
- 黑马程序员——集合框架接口的分类:(分collection接口 和 map接口)
- Unity3D技术之相机使用技巧-从相机到给定距离的视锥体大小
- 通过HDFS的API访问文件系统的例子
- 二维数组传参的几种方法
- [leetcode]Set Matrix Zeroes
- 【菜鸟也疯狂UML系列】——概述
- 黑马程序员---集合体系的继承关系图。顶层接口Collection中的方法,迭代器Iterator使用和原理,List派系特点
- 学习笔记-XML、DTD与Schema
- HTML5学习笔记(二)
- C#异常处理初探
- 黑马程序员----List集合中的另外两个小弟,Vector LinkedList(实现结构,本身特点,自己的独有方法). 泛型技术:
- 学码、写码从今日开始
- 利用VIM的guioptions选项个性化你的MS-Gvim
- 开通C博的第一篇文章
- 1010. 一元多项式求导 (25)