栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线性表--顺序表(Demo)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线性表--顺序表(Demo)

Java代码实现简单的线性表(类ArrayList)的Demo

package com.test.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//顺序表代码
public class SequenceList implements Iterable {
    //元素长度
    private int LENGTH;
    //存储元素的数组
    private T[] elementData;
    //默认数组长度
    int initCapacity = 4;

    //构造方法
    public SequenceList() {
        elementData = (T[]) new Object[initCapacity];
    }

    //指定数组长度的构造方法
    public SequenceList(int capacity) {
        elementData = (T[]) new Object[capacity];
    }

    //清空当前线性表内容
    public void clear() {
        elementData = null;
        LENGTH = 0;
    }

    //获取当前线性表的长度
    public int getLength() {
        return this.LENGTH;
    }

    //获取线性表中数组的大小
    public int elementDataLength(){
        return elementData.length;
    }

    //判断当前线性表是否为空
    public boolean isEmpty() {
        return LENGTH == 0;
    }

    //获取指定位置的元素
    public T get(int i) {
        if (i < 0 || i >= LENGTH) {
            throw new RuntimeException("当前元素不存在!");
        }
        return elementData[i];
    }

    //添加元素
    public void insert(T t) {
        if (LENGTH == elementData.length) {
            resize(elementData.length * 2);
        }
        elementData[LENGTH] = t;
        LENGTH++;
    }

    //在指定位置添加元素
    public void insert(T t, int i) {
        if (i < 0 || i > LENGTH) {
            throw new RuntimeException("插入的位置不正确!");
        }
        if (LENGTH == elementData.length) {
            resize(elementData.length * 2);
        }
        for (int j = LENGTH; j > i; j--) {
            elementData[j] = elementData[j - 1];
        }
        elementData[i] = t;
        LENGTH++;
    }

    //改变数组容量大小
    private void resize(int newSize) {
        T[] temp = elementData;
        elementData = (T[]) new Object[newSize];
        for (int i = 0; i < LENGTH; i++) {
            elementData[i] = temp[i];
        }
    }

    //删除指定位置的元素并返回
    public T remove(int i) {
        if (i < 0 || i >= LENGTH) {
            throw new RuntimeException("当前元素不存在!");
        }
        T temp = elementData[i];
        //删除的元素的位置空出来了,后面的元素全部向前移一位
        for (int j = i; j < LENGTH - 1; j++) {
            elementData[j] = elementData[j + 1];
        }
        LENGTH--;
        //当元素数量不足数组大小的1/4时,重置数组的大小
        if (LENGTH > 0 && LENGTH < elementData.length / 4) {
            resize(elementData.length / 2);
        }
        return temp;
    }

    //根据元素内容查找第一次出现的下标位置
    public int getIndex(T t) {
        if (t == null) {
            throw new RuntimeException("所查找元素不合法!");
        }
        for (int i = 0; i < LENGTH; i++) {
            if (elementData[i].equals(t)) {
                return i;
            }
        }
        return -1;
    }

    //打印当前线性表数据
    public void printData() {
        for (int i = 0; i < LENGTH; i++) {
            System.out.print("[" + i + "]=" + elementData[i] + " ");
        }
        System.out.println();
    }

    @Override
    public Iterator iterator() {
        return new SIterator();
    }

    private class SIterator implements Iterator {

        private int current;

        public SIterator() {
            this.current = 0;
        }

        @Override
        public boolean hasNext() {
            return current < LENGTH;
        }

        @Override
        public Object next() {
            return elementData[current++];
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号