ArrayList与顺序表

文章详细介绍了ArrayList和顺序表的概念,其中ArrayList是Java集合框架的一部分,提供动态数组功能。文章还展示了如何自我实现一个简单的MyArrayList类,包括添加、删除、查找、扩容等基本操作,并提供了测试用例。最后,讨论了ArrayList的构造方法和常用方法,以及遍历方式。
摘要由CSDN通过智能技术生成

ArrayList与顺序表

目录

一.顺序表
二.ArrayList
三.自我实现MyArrayList
1.创建类
2.打印顺序表
3.判断是否为满
4.扩容
5.新增元素(在数组最后新增)
6.获取长度
7.查找元素位置
8.删除第一次出现的元素
9.判断是否包含
10.清空
四.测试MyArrayList
五.ArrayList的使用
1.构造方法
2.ArrayList常见方法
3.ArrayList的遍历
总结


一.顺序表

顺序表是一种线性表的存储结构,它的元素在内存中是连续存储的。一般情况下采用数组存储,在数组上完成数据的增删查改。
在这里插入图片描述


二.ArrayList

ArrayList是Java中的一个类,它是Java集合框架的一部分。它提供了一种动态数组的数据结构,可以根据需要自动增长和缩小。
在这里插入图片描述
说明

  • ArrayList是以泛型方式实现,需要实例化
  • ArrayList支持随机访问
  • ArrayList可以clone
  • ArrayList支持序列化

三.自我实现MyArrayList

注:以整型为例

1.创建类
	public class MyArraylist {
    	public int[] elem;
    	public int usedSize;//表示存储了多少有效数据
    	//默认容量
    	private static final int DEFAULT_SIZE = 10;

    	public MyArraylist() {
        	this.elem = new int[DEFAULT_SIZE];
    }
2.打印顺序表
	public void display() {
    	for(int i = 0; i < this.usedSize; i++) {
    		System.out.print(this.elem[i] + " ");
    	}   
    	System.out.println();
	}
3.判断是否为满
	public boolean isFull() {
    	if (this.usedSize == this.elem.length) {
            return true;
        }
        return false;   
    }
4.扩容

此处使用2倍扩容

	private void resize() {
        this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
    }
5.新增元素(在数组最后新增)
	public void add(int data) {
    	if(this.isFull()) {
            resize();
        }
        this.elem[this.usedSize] = data;
        this.usedSize++;	   
    }
6.获取长度
	public int size() {
        return this.usedSize;
    }
7.查找元素位置
	public int indexOf(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if (this.elem[i] == toFind) {
                return i;
            }
        }
        return -1;
    }
8.删除第一次出现的元素
	public void remove(int toRemove) {
        int index = indexOf(toRemove);//找到元素所对应的位置
        if(index == -1) {
            System.out.println("没有这个数据");
            return;
        }
        for (int i = index; i < usedSize-1; i++) {
            elem[i] = elem[i + 1];
        }//从i位置开始把后面的元素往前盖
        usedSize--;
        elem[usedSize] = 0;
    }
9.判断是否包含
	public boolean contains(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if (this.elem[i] == toFind) {
                return true;
            }
        }
        return false;
    }
10.清空
	public void clear() {
        usedSize = 0;
    }

注:以上自我实现都以整型为例,引用类型需要修改


四.测试MyArrayList

在这里插入图片描述
首先先实例化对象,通过新增元素添加了四个元素并进行打印,通过isFull()方法判断是否为满,查找元素1的位置,并且删除第一次出现的元素5,因为这时候还没有新增元素5,所以会打印“没有这个数据”,再新增七个元素测试扩容并获取长度,然后测试是否包含元素11,最后清空。结果如下图所示:
在这里插入图片描述


五.ArrayList的使用

1.构造方法
  • new ArrayList():构造一个初识容量为十的空列表。
  • ArrayList(int initialCapacity):构造具有指定初始容量的空列表。
  • ArrayList(Collection<? extends E> c) :构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
2.ArrayList常见方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.ArrayList的遍历

ArrayList可以使用三种方式便利:for循环+下标,foreach、迭代器
在这里插入图片描述
在这里插入图片描述

总结

使用ArrayList可以方便地进行元素的增加、删除、获取和遍历等操作。它是常用的集合类之一,特别适用于需要频繁添加或删除元素的场景。在这里插入代码片

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值