package com.datastructure;
import java.util.Arrays;
/**
* 列表:
* 它表示元素的有序集合,支持元素访问、修改、添加、删除和遍历等操作,无须使用者考虑容量限制的问题;
* 列表可以基于链表或数组实现。
*
*
* 扩容机制:若插入元素时列表容量已满,则需要进行扩容。先根据扩容倍数创建一个更大的数组,再将当前数组的所有元素依次移动至新数组
*
* 列表实现:
* 1.初始容量
* 2.数量记录
* 3.扩容机制
*
*/
public class MyList {
private int[] arr;//数组(存储列表元素)
private int capacity=10;//列表容量
private int size=0;//列表长度(当前元素数量)
private int extendRatio=2;//每次列表扩容的倍数
public MyList(){
arr=new int[capacity];
}
/**
* 获取列表长度(当前元素数量)
* @return
*/
public int size(){
return size;
}
/**
* 获取列表容量
* @return
*/
public int capacity(){
return capacity;
}
/**
* 获取元素(访问元素)
* @param index
* @return
*/
public int get(int index){
//索引如果越界,则抛出异常,
if(index<0||index>=size)
throw new IndexOutOfBoundsException("索引越界");
return arr[index];
}
/**
* 更新元素
* @param index
* @param num
*/
public void set(int index ,int num){
if(index<0||index>=size){
throw new IndexOutOfBoundsException("索引越界");
}
arr[index]=num;
}
/**
* 在尾部添加元素
* @param num
*/
public void add(int num){
//元素数量超出容量时,出发扩容机制
if(size==capacity()){
extendCapacity();
}
arr[size]=num;
//更新元素数量
size++;
}
/**
* 在中间插入元素
* @param index
* @param num
*/
public void insert(int index,int num){
if(index<0|| index >=size)
throw new IndexOutOfBoundsException("索引越界");
//元素数量超出容量,触发扩展机制
if(size==capacity())
extendCapacity();
//将索引index以及之后的元素都向后移动一位
for(int j=size-1;j>=index;j--){
arr[j+1]=arr[j];
}
arr[index]=num;
//更新元素数量
size++;
}
/**
* 删除元素
*/
public int remove(int index){
if(index<0 || index>=size)
throw new IndexOutOfBoundsException("索引越界");
int num=arr[index];
//将索引index 之后的元素都向前移动一位
for(int j=index;j<size-1;j++){
arr[j]=arr[j+1];
}
//更新元素数量
size--;
//返回被删除的元素
return num;
}
/**
* 列表扩容
*/
public void extendCapacity() {
//新建一个长度为原数组extendRatio倍的新数组,并将原数组复制到新数组
arr= Arrays.copyOf(arr,capacity*extendRatio);
//更新列表容量
capacity=arr.length;
}
/**
* 将列表转为数组
* @return
*/
public int[] toArray(){
int size=size();
//仅转换有效长度范围内的列表元素
int[] arr=new int[size];
for(int i=0;i<size;i++){
arr[i]=get(i);
}
return arr;
}
}
详解列表实现(list)
本文介绍了Java中MyList类的实现,包括列表数据结构的概念,支持的操作如获取/设置元素、添加、删除,以及关键的扩容机制,当列表满时通过数组扩展来保证性能。
摘要由CSDN通过智能技术生成