day16面向对象 集合

  1. 数组封装
    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 测试
在这里插入图片描述

  1. 集合
    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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值