带你深入了解Java!十三、集合框架(一)!
< 集合框架(一) >
在Java程序中如何存储数据:
变量
数组:1、长度不能改变 2、数据类型单一(吃货联盟,为了存储订单信息、菜单信息,定义了n个数组)
类和对象(实体)
对象数组:它在一定程度上解决了数据类型单一的问题
一、了解Java集合框架体系结构
底层时数组结构
长度不可变问题!
下次课是为了解决更复杂的数据存储问题。
-
实现可变数组:
定义不同数组、长度随便指定一个
当有数据需要插入式,判断当前长度是否足够存储数据,如果不够创建新的数组
Arrays.copyOf(arr,length);
将新数组返回
工具类
Cdlections
Arrays
二、会使用ArrayList存储数据
ArrayList<存储的数据的类型> 集合名 = new ArrayList<存储的数据类型>();
- 1、 boolean add(Object object); 向列表中追加元素
- 2、 void add(int index,Object obkect); 向列表中的指定索引添加元素
- 3、 int size(); 获取列表胀肚/元素个数
- 4、 Object get(int index); 根据索引获对应的元素
- 5、 boolean contains(Object ob); 判断是否包含某个元素
- 6、 boolean remove(Object ob); 删除指定元素
- 7、 Object remove(int index);根据索引删除元素 且返回被删除的元素值
来自于ArrayList的父级接口们
- toArray()转换为数组
- clear() 清除所有元素
- isEmpty()判断是否为空集合 / list.size == 0
-
iterator()迭(die)代器
(数据类型…名) 可变形参
集合泛型特点:它是用来约束/声明集合元素的数据类型的。 -
泛型必须是引用数据类型,如果存储基本数据类型值,则必须将转其为对应引用数据类型(包装类型)
三、 会使用LinkedList存取数据
底层是链表结构(双向链表)
LinkedList <存储的数据类型> 集合名 = new LinkedList <存储的数据类型>();
四、了解ArrayList和LinkedList的区别(面试题)
-
ArrayList:
底层是数组结构,所以因为是数组,则拥有索引,在遍历或查找时比较快,但是又因为时数组,数组长度不可变,每一次增删都要创建新的数组,比较慢。 -
LinkedList:
底层时链表结构,链表结构每一个元素由两部分组成,数据域和指针域,他没有索引。多个元素之间,通过指针域指向连接,因为没有索引,所以 查找比较慢,但是因为链表所以在 增删 时只需要切换指针指向即可(尤其首位更 快 ) - 在我们使用时,发现ArrayList和LinkedList好像都拥有索引,为什么呢?
他们的索引不同!
- ArrayList的索引是固定的。类似于座位号
- LinkedList的索引是根据元素位置计算出来的,并非固定。找到第16个座位
五、 掌握使用Set集合存取数据
无序 唯一
HashSet
其实它是实现唯一是根据hasCode()和equals()来做的比较
集合的遍历
笔记
链表
单向链表
双向链表