本系列博客汇总在这里:Java系列_汇总
目录
- 一、数组存放多种数据类型
- 二、集合的概述
- 1、需求:把你们班级的学生存储起来。
- 2、面试题:数组和集合的区别?
- 3、集合的体系结构
- 三、集合中的几个重要方法
- 1、添加
- 2、获取
- 3、删除
- 四、List 集合(接口)
- 五、List 接口的实现类
- 1、ArrayList
- 2、LinkedList
- 3、vector
- 4、关于线程安全的说明
- 六、集合的遍历(迭代器)
- 1、迭代器模式
- 2、ListIterator() 和 iterator()
- 3、遍历集合除了是用迭代器,还可以使用一般的方法进行遍历
- 七、集合中泛型的使用
- 八、自定义泛型
- 九、增强 for 循环遍历集合
- 十、并发安全简要说明
一、数组存放多种数据类型
- 一般的数组具有局限性,不能自动扩容,也不能存放多种数据类型;但是存放多种数据类型是可以做到的,例如:
因为 object 是所有类的根类。
二、集合的概述
集合也叫容器,用于存储对象。我们根据不同的需求和不同的数据结构来对集合做了不同的抽象。
1、需求:把你们班级的学生存储起来。
如果使用数组,数组的长度是固定的,无法满足动态的数据添加。
2、面试题:数组和集合的区别?
数组:长度固定。
(1)可以存储基本数据类型,也能存储对象。
(2)同时,使用 Object 可以存储多种数据类型数据。集合:长度可变。
能存储对象类型(由于有包装类的存在,集合中也是可以存储任何数据类型的)。
3、集合的体系结构
三、集合中的几个重要方法
1、添加
2、获取
3、删除
四、List 集合(接口)
- java.util 包下的 List 为接口,注意区分下面的 List 类。
- java.awt 包下的 List 为类(不属于集合)。
五、List 接口的实现类
1、ArrayList
- ArrayList 是 List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。
- 特点:ArrayList 中的元素和可以重复是有序的集合;长度不固定;不是线程安全的(意味着可以多个人来修改),但效率高。
2、LinkedList
- LinkedList 是 List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null )。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。不是线程安全的。
- 需要掌握的方法(子类独有)
- 更多方法参见 API !
3、vector
- vector 和 ArrayList 功能类似,最主要的区别就在于 vector 是线程并发安全的,但是缺点是效率比较低。
- 需要掌握的方法(子类独有)
- 更多方法参见 API !
4、关于线程安全的说明
上图表示的是线程不安全的情况;相对的线程安全就像在火车上上厕所,只能有一个人进去,这个人出来了,后面的人才能进,但是这样就效率低;线程不安全就是所有人都同时进入“厕所”,先进的被覆盖,但是效率高。
六、集合的遍历(迭代器)
1、迭代器模式
- 迭代器模式就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节,java 中集合就是一种容器,也有对应的迭代器。
- 迭代器的工作原理
- 迭代器的使用过程中会先判断是否存在下一个元素,当检测不存在下一个元素的时候,这个迭代器就算“ 用完了 ”,如果再使用该迭代器取下一个值得时候就会抛出异常。
- 迭代器是一次性的,不能重复使用同一个迭代器二次遍历集合;只能重新创建新的迭代器!
2、ListIterator() 和 iterator()
- iterator 迭代器在使用的时候,不能操作集合当中的数据,例如添加、删除、修改数据等。
- ListIterator 不同于 iterator(),这个迭代器在遍历的时候可以对数据进行插入,但是当前遍历,无法打印刚添加的元素。
3、遍历集合除了是用迭代器,还可以使用一般的方法进行遍历
- for 循环可以遍历集合。
- for 循环遍历可以解决数据添加,删除,修改问题。
七、集合中泛型的使用
- 集合中可以存储任何数据类型,实际情况都是在集合中存一种数据类型,我们可以通过泛型来制定这种数据类型。
- 我们在项目中使用集合基本 99% 都是在集合中存储同一种数据类型。既然我们在集合中存储同一种数据类型,我们事先一定知道这个集合中要存储什么数据类型。我们就可以预先去指定要存储的数据类型。
八、自定义泛型
- 示例
public class GenericTest<T>
{
private T[] arr;
public T[] getArr()
{
return arr;
}
public void setArr(T[] arr)
{
this.arr = arr;
}
public T getByIndex(int index)
{
return arr[index];
}
}
九、增强 for 循环遍历集合
- 增强的 for 循环:
for(数据类型:集合)
- 这种增强 for 循环线程不是安全的,遍历中不能对数据进行操作。
十、并发安全简要说明
如有错误,欢迎指正!