1/18笔记

1 数组封装

数组操作,相对复杂,不能做添加和删除操作,当需要添加删除时 需要创建新数组,复制数组,或者元素移位,很麻烦 所以我们对这些添加和删除操作进行封装

public class Array {

private Object[] elements;

private int size = 0;

public Array() {

elements = new Object[10];

}

public int size() {

return size;

}

public Object get(int index) {

if (index >= size) {

throw new ArrayIndexOutOfBoundsException(index);

}

return elements[index];

}

public void set(int index, Object element) {

// 如果index >= size 说明 不存在

if (index >= size) {

throw new ArrayIndexOutOfBoundsException(index);

}

elements[index] = element;

}

public void add(Object element) {

if (size == elements.length) {

Object[] newArr = new Object[size << 1];

System.arraycopy(elements, 0, newArr, 0, size);

elements = newArr;

}

elements[size] = element;

size++;

}

public void remove(int index) {

if (index >= size) {

throw new ArrayIndexOutOfBoundsException(index);

}

for (int i = index; i < size - 1; i++) {

elements[index] = elements[index + 1];

}

elements[size - 1] = null;

size--;

}

}

Array arr=new Array();//创建对象

arr.size();//元素个数

arr.add();//尾部添加

arr.set(1,"张三");//更改

arr.get(i);//获取

arr.remove(1);//删除

2 集合

2.1 概述

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 使用方式

Collection collection = new ArrayList();//创建一个ArrayList对象

collection.isEmpty();//判断是否为空

collection size();//已有元素个数

添加 , 如果添加一个基本类型,则会进行自动装箱为对应的包装类类型,然后再发生多态转型为Object类型

collection.add(1);collection.add(3);collection.add(5);collection.add("张三");

删除指定元素,不是索引,是根据数据删除

collection.remove("张三");collection.remove(5);

Object[] arr = collection.toArray();//转换为数组

collection.clear();//清空集合中的数据

2.3.3 迭代器

迭代器是一种模式,它可以使遍历和被遍历的对象相分离,我们就不再关心底层是什么数据结构,是如何进行数据存储的只要拿到迭代器对象,就可以进行遍历

collection中 提供了一个 iterator() 方法 用于获取迭代器对象集合.iterator();

迭代器中,有三个方法
1)boolean  hasNext() : 判断游标下是否还有元素,默认指向顶端,并没有指向第一个元素
2)E next() : 将迭代器游标向下移动一位,并取出该元素
3)remove () : 删除当前执行的元素,会把集合中的也删除

生成迭代器后不能添加和删除,除非重新生成

增强for循环forEach 就是迭代器的简写方式

迭代器使用完之后,想要再次使用,需要重新生成,因为光标已经指向最后一个了

2.3.4 注意

contains(Object o) : 判断是否包含某个元素

remove(Object o ) : 删除指定元素

这两个方法,底层都会去调用equals方法进行比较

当我们保存的自定义类对象的时候,需要使用contains和remove的时候要注意覆写equals方法

2.4 forEach

foreach是迭代器的简写方式,所以功能有限,只能查询,不能删除
想要在遍历中删除,需要使用迭代器的remove

2.5 List

2.5.1 ArrayList

list中 remove方法有重载
如果传入的是 int值 则是删除对应索引的元素 , 根据索引删除
如果传入引用类型的值,则是删除对应的数据 , 根据元素值删除
list.remove(0);删除索引为0的元素
list.remove(new Integer(4));删除 值为4的元素

Collection.sort(list);//对list升序排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值