黑马程序员——基础知识——集合
来源:互联网 发布:解析json文件的代码 编辑:程序博客网 时间:2024/05/23 19:18
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只在面试时候用)
- 黑马程序员——java基础知识篇——>集合
- 黑马程序员——基础知识——集合
- 黑马程序员——java基础知识之集合框架(容器)
- 黑马程序员——基础知识总结_集合框架1
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—c#基础知识。。
- 黑马程序员—Java基础知识
- 黑马程序员—多线程基础知识
- 黑马程序员——Java基础知识——集合框架、集合工具类、Arrays
- 黑马程序员——集合
- 黑马程序员——集合
- JS模拟事件操作
- JedisPool高并发
- android--sqlite数据库创建的真正时候
- Bootstrap之表格checkbox复选框全选
- OC_01(创建对象)
- 黑马程序员——基础知识——集合
- d3 词云 重叠问题
- JasperReport学习笔记3-在浏览器生成PDF文件
- 在GridView中设置每个单元格的数据
- C#之数据类型转换
- QtoolBox的使用
- 使用Visual Leak Detector检查内存泄露
- vba的宏和模块,关于excel表的合并
- css 菜单搜索栏 随滚动条滚动 浮起来