常见的数据结构3 数组

常见的数据结构 -数组(ArrayList)

数组

数组:Array,是有序的元素序列,数组是在内存中开辟⼀段连续的空间,并在此空间存放
元素。就像是⼀排出租屋,有100个房间,从001到100每个房间都有固定编号,通过编号就
可以快速找到租房⼦的⼈。
简单的说,采⽤该结构的集合,对元素的存取有如下的特点:查找元素快:通过索引,可以快速访问指定位置的元素
在这里插入图片描述
在这里插入图片描述

ArrayList 集合常用方法

1.boolean add(Object obj) 将指定元素obj追加到集合的末尾
2.Object get(int index) 返回集合中指定位置上的元素
3.int size() 返回集合中的元素个数
4.boolean add(int index, Object obj) 将指定元素obj插入到集合中指定的位置
5.Object remove(int index) 从集合中删除指定index处的元素,返回该元素
6.void clear() 清空集合中所有元素
7.Object set(int index, Object obj) 用指定元素obj替代集合中指定位置上的元素
8.boolean isEmpty() 判断集合是否为空
9.boolean contain(Object obj) 判断集合是否存在该元素

ArrayList 代码实现

package date;
import java.util.Arrays;
/*
 *顺序结构手动实现 -ArrayList
 * 底层实现:数组
 * 目的:让外面的类看来,它是一个可变长的数组
 * 数组扩容
 * */
public class MyArrayList {
    protected int size = 0;
    private Object[] arr;

    public MyArrayList() {
        arr = new Object[10];
    }
    /*顺序结构 / 链表结构
    实现功能:
    1.向集合(this)中末尾添加元素
    2.向集合index的位置中插入obj元素
    3.删除指定位置(index)上的元素,并且返回删除的元素
    4.删除第一个指定元素(obj)
    5.替换指定位置上的元素,替换成obj,并且返回被替换的元素
    6.从集合中获得指定位置(index)的元素
    7.获得集合中的元素个数
    8.判断集合中是否存在指定元素obj
    9.判断集合是否为空:没有有效元素是空
    10.打印出在集合中的有效元素
  */

    //1.向集合(this)中的末尾添加元素
    public void add(Object obj) {
        if (size == arr.length) {
            arr = Arrays.copyOf(arr, arr.length + 5);
        }
        arr[size] = obj;
        size++;
    }

    //2.向集合index的位置中插入obj元素
    public void insert(Object obj, int index) {
        if (index < 0 || index > size) {
            return;
        }
        //数组扩容
        if (size == arr.length) {
            arr = Arrays.copyOf(arr, arr.length + 5);
        }

        for (int i = size - 1; i >= index; i--) {
            arr[i + 1] = arr[i];
        }
        arr[index] = obj;
        size++;
    }

    //3.删除指定位置(index)上的元素,并且返回删除的元素
    public Object remove(int index) {
        if (index < 0 || index > size - 1) {
            System.out.println("删除的下标越界");
            return null;
        }
        Object o = arr[index];
        for (int i = index; i < size; i++) {
            arr[i] = arr[i + 1];
        }
        size--;
        return o;
    }

    //4.删除一个指定元素(obj)
    public void remove(Object obj) {
        for (int i = 0; i < size; i++) {
            if (arr[i].equals(obj)) {
                remove(i);
            }
        }
    }

    //5.替换指定位置上的元素,替换成obj,并且返回被替换的元素
    public Object set(int index, Object obj) {
        if (index < 0 || index > size - 1) {
            System.out.println("替换的下标越界");
        }
        Object o = arr[index];
        arr[index] = obj;
        return o;
    }

    //6.从集合中获得指定位置(index)的元素
    public Object get(int index) {
        if (index < 0 || index > size - 1) {
            System.out.println("替换的下标越界");
        }
        return arr[index];

    }

    //7.获得集合中的元素个数
    public Object size() {
        return size;
    }

    //8.判断集合中是否存在指定元素obj
    public boolean contain(Object obj) {
        for (int i = 0; i < size; i++) {
            if (arr[i].equals(obj)) {
                return true;
            }
        }
        return false;
    }

    //    9.判断集合是否为空:没有有效元素是空
    public boolean isEmpty() {
        if (size == 0)
            return true;
        return false;
    }

    //    10.打印出在集合中的有效元素
    public void printf() {
        Object[] array = new Object[size];
        for (int i = 0; i < size; i++) {
            array[i] = arr[i];
        }
        System.out.println(Arrays.toString(array));
    }

    //重写toString 方法
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < size; i++) {
            sb.append(arr[i] + ",");
        }
        sb.deleteCharAt(sb.length() - 1);
        sb.append("]");
        return sb.toString();
    }

}

测试类:

package date;
public class MyArrayListTest {
    public static void main(String[] args) {
        MyArrayList list = new MyArrayList();
        list.add("2");
        list.add("3");
        list.add("4");
        list.insert("1",0);
        System.out.println(list);
        list.remove(4);
        System.out.println("删除规定的下标后"+list);
        list.remove("1");
        System.out.println("删除指定元素后"+list);
        list.set(2,"5");
        System.out.println(list.get(1));
        System.out.println("替换元素后"+list);
        System.out.println("集合个数"+list.size);
        System.out.println(list.contain("1"));
        System.out.println(list.isEmpty());
        list.printf();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值