- 数组封装
1.1 需求
数组操作,相对还是比较复杂的,也不能做添加和删除操作,当需要添加和删除的时候需要新建数组,复制数组,或者元素移位,比较麻烦
所以 我们对这些添加和删除操作进行封装
1.2 编码实现
package day_01;
public class Array {
/**
* 封装的数组
*/
private Object[] elements;
/**
* 数组中已有元素个数
*/
private int size = 0;
public Array() {
// 数组默认长度为 10
elements = new Object[10];
}
/**
* 获取元素个数
*
* @return
*/
public int size() {
return size;
}
/**
* 根据索引获取数据
*
* @param index
* @return
*/
public Object get(int index) {
// 如果index >= size 说明 不存在
if (index >= size) {
throw new ArrayIndexOutOfBoundsException(index);
}
return elements[index];
}
/**
* 更改
*
* @param index
* @param element
*/
public void set(int index, Object element) {
// 如果index >= size 说明 不存在
if (index >= size) {
throw new ArrayIndexOutOfBoundsException(index);
}
elements[index] = element;
}
/**
* 向数组中添加元素
*
* @param element
*/
public void add(Object element) {
// 1 判断数组中是否满了
if (size == elements.length) {
// 1.2 满了 就扩容,复制数组,再放进去
// 扩容为原来的二倍
Object[] newArr = new Object[size << 1];
// 数组复制
System.arraycopy(elements, 0, newArr, 0, size);
// 赋值
elements = newArr;
}
// 添加进去,size++
elements[size] = element;
size++;
}
/**
* 删除指定元素
*
* @param index
*/
public void remove(int index) {
// 如果index >= size 说明 不存在
if (index >= size) {
throw new ArrayIndexOutOfBoundsException(index);
}
// 移位
for (int i = index; i < size - 1; i++) {
elements[index] = elements[index + 1];
}
// 最后一位赋值为null
elements[size - 1] = null;
// 个数-1
size--;
}
}
1.3 测试
- 集合
2.1 概述
Java集合是使程序能够存储和操纵元素不固定的一组数据。 所有Java集合类都位于java.util包中。
【问】:之前我们需要把多个元素放到一起的时候,使用的是数组。那么为何还要提供Java集合工具类呢?
我们通过对比数组和Java集合工具类来解释Java集合工具类的必要性。
数组 集合
长度固定 长度不固定
存放任意类型 不能存放基本数据类型,只能存放对象的引用
注意:如果集合中存放基本类型,一定要将其 “装箱”成对应的”基本类型包装类”。
2.2 继承体系
Collection 是集合,两个直接子接口是List和set
List 特性 : 有序 可重复,保证数据的添加顺序和取出顺序一致
Set 特性 : 无序 不可重复,不能保证数据的添加和取出顺序一致
List 有三个子类 :
ArrayList : 底层是数组,查询和更改效率极高
LinkedList : 底层是双向链表,添加和删除效率要高一些
Vector : 底层也是数组,是线程安全,已废弃,不推荐使用,已被ArrayList代替
Set有两个子类
HashSet : 底层是散列表
TreeSet : 底层是二叉树
2.3 Collection
Collection作为集合类的父类,所以,collection中的方法,是所有集合类都有的方法
2.3.1 常用方法
2.3.2 使用方式
以ArrayList为例
2.3.3 Iterator
迭代器
2.3.4 注意
2.4 forEach
2.5 List
2.5.1 ArrayList
2.5.2 LinkedList