1. 数组封装
1.1. 需求
数组操作,相对还是比较复杂的,也不能做添加操作和删除操作,当需要添加和删除的时候需要新建数组,复制数组,或者元素位移,比较麻烦
所以我们对这些添加和删除操作进行封装
1.2. 编码实现
1.3. 测试
2. 集合
2.1. 概述
Java集合是使程序能够存储和操纵元素不固定的一组数据。所以Java集合类都位于Java.util包中。
【问】:之前我们需要把多个元素放到一起的时候,使用的是数组。那么为何还要提供Java集合工具类呢?
我们通过对比数组和Java集合工具类来解释Java集合工具类的必要性。
数组 | 集合 |
长度固定 | 长度不固定 |
存放任意类型 | 不能存放基本数据类型,只能存放对象的引用 |
注意:如果集合中存放基本类型,一定要将其 “装箱”成对应的”基本类型包装
2.2. 继承体系
Collection是集合,两个直接子类接口是List和Set
List特征:有序,可重复,保证数据的添加顺序和取出顺序一致
Set特性:无序,不可重复,不能保证数据的添加和取出顺序一致
List有三个子类:
ArrayList:底层是数组,查询和更改效率极高
LinkedList:底层是双向链表,添加和删除效率要高一些
Vector:底层也是数组,是线程安全,已废弃,不推荐使用,已被ArrayyList代替
Set有两个子类:
HashSet:底层是散列表
TreeSet:底层是二叉树
2.3. Collection(集合类父类)
Collection作为集合类的父类,所以,collection中的方法,是所有集合类都有的方法
2.3.1. 常用方法
2.3.2. 使用方式
创建:Collection collection = new ArrList();
添加单个数据到尾部:collection.add("a");
添加一个集合,等于合并两个集合:collection addAll(collection);
没有提供修改和获取的方法
删除某个元素:collection.remove("a");
删除指定集合中所有元素:collection.removeAll(collection);
个数:System.out.println(collection.size());
清空:collection.clear();
判断是否为空(个数是否为0):System.out.prrintln(collection.isEmpty());
判断是否包含某个元素:System.out.println(collection.contains("xxx"));
2.3.3. Iterator(迭代器)
迭代器:主要是做遍历操作,使用迭代器可以屏蔽数据结构之间的差异性
hasNext:判断是否还有元素
next:返回下一个元素
remove:删除这个元素,(注意使用这个迭代器时,如果要删除元素必须使用迭代器的remove删除)
迭代器一旦生成,集合不能修改,否则就需要重新生成迭代器iterator()
2.3.4. 注意
contains(Object o):判断是否包含某个元素
remove(Obiect o):删除指定元素
这两个方法,底层都会区调用equals方法进行比较
2.4. forEach(迭代器的简写形式)
for(数据类型 变量 : 集合/数组){循环体}
2.5. List
List:有序可重复
有序:先后顺序,先到先得,队列,添加顺序取出顺序是一样的
可重复:可以添加重复数据
ArrayList:底层是Object数组,所以查询和修改效率极高
LinkedList:底层是双向链表,随机添加和删除效率极高