黑马程序员——基础知识——集合
2015-11-10 16:11
471 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Day15 面向对象 集合 IO 反射
集合是一个体系,一个更强大的容器,类很多,体系中功能很多
15.01 对象数组的概述和使用
1、案例演示
需求:我有5个学生,请把这5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息
2、画图演示
把学生数组的案例画图讲解
数组和集合存储引用数据类型,存的都是地址值
15.02 集合的由来及集合继承体系图
1、集合的由来 集合和数组都是容器,而集合是变化的容器
数组长度是固定的,当添加的元素超过了数组的长度时需要对数组重新
定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度时可以改变的,随着元素的增加而增加,随着元素的减少而减少。
2、数组和集合的区别
区别1:
数组既可以存储基本数据类型,又可以存储引用数据类型,基本数
据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象),集合能否存储基本数据类型,
也能,但是在存储的时候会自动装箱变成对象,变对象了,例如100,就变成了new Integer(100)
区别2:
数组长度是固定的,不能自动增长
集合的长度是可变的,可以根据元素的增长而增长
3、数组和集合什么时候用,以下是从内存角度考虑
如果元素个数是固定的推荐用数组,效率比较高
如果元素个数不是固定的推荐用集合,而集合的内存是随对象的增加而
一点点增加上去的,随着对象的增加,就会新开辟数组对象,而原数组对象就变成了垃圾。
4、集合继承体系图
15.03 Collection集合的基本功能测试
1、案例演示
基本功能演示
是util包下的,是一个接口(全是抽象方法),List、 Set是其子接口,其他是实现类
2、注意:
在EditPlus中如果不加泛型,编译的时候就会出现以下提示:
collectionXxx.java使用了未经检查或不安全的操作
注意:要了解详细信息,请使用-Xlint:unchecked重新编译
Java编译器认为该程序存在安全隐患
温馨提示:这不是编译失败,所以先不用理会,等学了泛型就知道了,
泛型的作用就是为了安全隐患的事
15.04 集合的遍历之集合转数组遍历,以后用迭代
1、集合的遍历其实就是依次获取集合中的每一个元素
2、案例演示
把集合转成数组,可以实现集合的遍历
toArray()
15.05 Collection集合的带All功能测试
1、案例演示
15.06 集合的遍历之迭代遍历
1、迭代器概述
集合是用来存储元素,存储的元素需要查看,那么就需要迭代(就是遍历)
2、案例演示
Iterator是util包下的
15.07 Collection存储自定义对象并遍历
1、案例演示
15.08 迭代器的原理及源码解析
1、迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后再每个类的内部,定义自己的迭代方式,这样做的好处有二:1、规定了整个集合体系的遍历方式都是hasNext()和next()方法;2、代码由底层内部实现,使用者不用管怎么实现的,会用即可。
2、迭代器源码分析
查找Iterator()方法,返回值类型是new Itr(),说明Itr这个类实现Iterator接口,查找Itr这个内部类,发现重写了Iterator中所有的抽象方法
hasNext() 方法去判断指针是否小于等于长度,next()方法将指针+1并返回获取到的值
15.09 List集合的特有遍历功能
Collection的子接口
1、List集合的特有功能概述
15.10 List集合存储学生对象并遍历
15.11 并发修改异常产生的原因及解决方法
1、案例演示
2、ConcurrentModificationException出现
迭代器遍历,集合修改集合
3、解决方案
迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
集合遍历元素,集合修改元素
15.12 ListIterator
15.13 Vector的特有功能
1、概述 属于JDK1.0版本,Vector是同步的
2、特有功能(element英文是元素)
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
3、案例演示
Vector也继承了Iterator,也可按Iterator的方法遍历,原来的迭代如下:
boolean hasMoreElement()相当于hasNext()
E nextElement()相当于next()
15.14 数据结构之数组和链表
1、数组ArrayList Vector
查询快修改也快,有索引找索引就行了查询很快
增删慢,需要将添加位后面所有元素都移动重赋索引值,再插入一个新值,删除也一样,后面所有元素都要移动
2、链表LinkedList 后面的对象记住前面对象的地址值,就和链子一样
查询慢,修改也慢 从第一个开始挨个询问
增删快 添加一个只需要记录俩地址值就行了,其他的都不变
以上两个是相对对方而言
15.15 List三个子类的特点
1、List三个子类的特点
ArrayList:
底层数据结构是数组,查询快(查询快当然修改快),增删慢
线程不安全,效率高
Vector:
底层数据结构是数组,查询快,增删慢
线程安全,效率低
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
Vector和ArrayList的区别,共同点底层都是数组结构
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
ArrayList和LinkedList的区别,共同点就是都是线程不安全的
ArrayList底层是数组结构,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
2、List有三个儿子,我们到底用谁呢
查询多用ArrayList
增删多用LinkedList
如果都多用ArrayList
(Vector只在面试时候用)
Day15 面向对象 集合 IO 反射
集合是一个体系,一个更强大的容器,类很多,体系中功能很多
15.01 对象数组的概述和使用
1、案例演示
需求:我有5个学生,请把这5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息
2、画图演示
把学生数组的案例画图讲解
数组和集合存储引用数据类型,存的都是地址值
15.02 集合的由来及集合继承体系图
1、集合的由来 集合和数组都是容器,而集合是变化的容器
数组长度是固定的,当添加的元素超过了数组的长度时需要对数组重新
定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度时可以改变的,随着元素的增加而增加,随着元素的减少而减少。
2、数组和集合的区别
区别1:
数组既可以存储基本数据类型,又可以存储引用数据类型,基本数
据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象),集合能否存储基本数据类型,
也能,但是在存储的时候会自动装箱变成对象,变对象了,例如100,就变成了new Integer(100)
区别2:
数组长度是固定的,不能自动增长
集合的长度是可变的,可以根据元素的增长而增长
3、数组和集合什么时候用,以下是从内存角度考虑
如果元素个数是固定的推荐用数组,效率比较高
如果元素个数不是固定的推荐用集合,而集合的内存是随对象的增加而
一点点增加上去的,随着对象的增加,就会新开辟数组对象,而原数组对象就变成了垃圾。
4、集合继承体系图
15.03 Collection集合的基本功能测试
1、案例演示
基本功能演示
是util包下的,是一个接口(全是抽象方法),List、 Set是其子接口,其他是实现类
2、注意:
在EditPlus中如果不加泛型,编译的时候就会出现以下提示:
collectionXxx.java使用了未经检查或不安全的操作
注意:要了解详细信息,请使用-Xlint:unchecked重新编译
Java编译器认为该程序存在安全隐患
温馨提示:这不是编译失败,所以先不用理会,等学了泛型就知道了,
泛型的作用就是为了安全隐患的事
15.04 集合的遍历之集合转数组遍历,以后用迭代
1、集合的遍历其实就是依次获取集合中的每一个元素
2、案例演示
把集合转成数组,可以实现集合的遍历
toArray()
15.05 Collection集合的带All功能测试
1、案例演示
15.06 集合的遍历之迭代遍历
1、迭代器概述
集合是用来存储元素,存储的元素需要查看,那么就需要迭代(就是遍历)
2、案例演示
Iterator是util包下的
15.07 Collection存储自定义对象并遍历
1、案例演示
15.08 迭代器的原理及源码解析
1、迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后再每个类的内部,定义自己的迭代方式,这样做的好处有二:1、规定了整个集合体系的遍历方式都是hasNext()和next()方法;2、代码由底层内部实现,使用者不用管怎么实现的,会用即可。
2、迭代器源码分析
查找Iterator()方法,返回值类型是new Itr(),说明Itr这个类实现Iterator接口,查找Itr这个内部类,发现重写了Iterator中所有的抽象方法
hasNext() 方法去判断指针是否小于等于长度,next()方法将指针+1并返回获取到的值
15.09 List集合的特有遍历功能
Collection的子接口
1、List集合的特有功能概述
15.10 List集合存储学生对象并遍历
15.11 并发修改异常产生的原因及解决方法
1、案例演示
2、ConcurrentModificationException出现
迭代器遍历,集合修改集合
3、解决方案
迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
集合遍历元素,集合修改元素
15.12 ListIterator
15.13 Vector的特有功能
1、概述 属于JDK1.0版本,Vector是同步的
2、特有功能(element英文是元素)
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
3、案例演示
Vector也继承了Iterator,也可按Iterator的方法遍历,原来的迭代如下:
boolean hasMoreElement()相当于hasNext()
E nextElement()相当于next()
15.14 数据结构之数组和链表
1、数组ArrayList Vector
查询快修改也快,有索引找索引就行了查询很快
增删慢,需要将添加位后面所有元素都移动重赋索引值,再插入一个新值,删除也一样,后面所有元素都要移动
2、链表LinkedList 后面的对象记住前面对象的地址值,就和链子一样
查询慢,修改也慢 从第一个开始挨个询问
增删快 添加一个只需要记录俩地址值就行了,其他的都不变
以上两个是相对对方而言
15.15 List三个子类的特点
1、List三个子类的特点
ArrayList:
底层数据结构是数组,查询快(查询快当然修改快),增删慢
线程不安全,效率高
Vector:
底层数据结构是数组,查询快,增删慢
线程安全,效率低
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
Vector和ArrayList的区别,共同点底层都是数组结构
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
ArrayList和LinkedList的区别,共同点就是都是线程不安全的
ArrayList底层是数组结构,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
2、List有三个儿子,我们到底用谁呢
查询多用ArrayList
增删多用LinkedList
如果都多用ArrayList
(Vector只在面试时候用)
相关文章推荐
- [leetcode-302]Smallest Rectangle Enclosing Black Pixels
- 黑马程序员——基础知识——正则及常见类
- 百度第三面失败经历
- 黑马程序员——基础知识——基本数据类型包装类
- iOS面试题集锦
- P151、面试题27:二叉搜索树与双向链表
- 黑马程序员——反射——Class、Constructor、Field、Method及简单框架原理
- 黑马程序员——集合
- 黑马程序员——多线程
- 黑马程序员_ARC
- 黑马程序员——异常
- 黑马程序员——abstract
- 黑马程序员——final
- 程序员如何尽快变的稍微专业一点
- 黑马程序员——多态
- 黑马程序员——构造函数
- 一位前辈工程师职业发展的忠告
- 黑马程序员——私有private
- 如何做个好员工(转载)
- ——黑马程序员——OC中Foundation框架NSString用法总结