public class Main {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(99);
list.add(88);
list.add(77);
list.add(66);
list.add(55);
list.add(44);
list.addLocation(2, 80);
list.addLocation(list.size(), 100);
list.set(2, 8);
/*if(list.get(2)!=80) {
throw new IllegalArgumentException("测试不通过");
}*/
System.out.println(list.toString());//打印数组
}
}
public class ArrayList {
private int size;//元素的数量,即真实数量,其值为编号+1
private int[] elements;
private static final int DEFAULT_CAPCITY = 10;
private static final int ELEMENT_NOT_FOUND = -1;
public ArrayList(int capcity) {
capcity = (capcity < DEFAULT_CAPCITY) ? DEFAULT_CAPCITY : capcity;//如果传入参数小于10,则用 DEFAULT_CAPCITY的容量10
elements = new int[capcity];//默认给的容量
}
public ArrayList() {
this(DEFAULT_CAPCITY);//构造函数互相调用 用this即elements = new int[DEFAULT_CAPCITY];
}
public void clear() {
size = 0;
}
public int size() {
return size;
}
public boolean isEmpty() {
if(size==0) {
return true;
}
else
{
return false;
}
}
public int get(int index) {
rangeCheck(index);
return elements[index];
}
public int set(int index,int element) {
rangeCheck(index);
int old = elements[index];//原来位置的元素
elements[index] = element;//把新的放进去
return old;
}
public int indexOf(int element) {
for(int i = 0;i < size;i++)
{
if(elements[i]==element)
return i;
}
return ELEMENT_NOT_FOUND;
}
public boolean contains(int element) {
for(int i = 0;i < size;i++) {
if(elements[i]==element)
return true;
}
return false;
}
public void add(int element)
{
elements[size] = element;
size++;
}
public int remove(int index) {
rangeCheck(index);
int old = elements[index];//先把要删除的数据做保存
for(int i= index+1;i<size;i++)
{
elements[i-1] = elements[i];
}
size--;
return old;
}
public void addLocation(int index,int element) {
rangeCheckForAdd(index);
ensureCapcity(size+1);//扩容操作
for(int i = size-1;i>=index;i--)
{
elements[i+1] = elements[i];
}
size++;
elements[index] = element;
}
/*
异常封装
*/
private void outOfBounds(int index) {
throw new IndexOutOfBoundsException("Index:"+",Size:"+size);//越界抛异常
}
private void rangeCheck(int index) {
if(index<0||index>=size)
{
outOfBounds(index);
}
}
private void rangeCheckForAdd(int index) {
if(index<0||index>size)
{
outOfBounds(index);
}
}
private void ensureCapcity(int capcity) {//扩容操作
int oldCapcity = elements.length;
if(oldCapcity>=capcity) return;
int newCapcity = oldCapcity+(oldCapcity>>1);//×1.5倍
int[] newElements = new int[newCapcity];
for(int i = 0;i<size;i++)
{
newElements[i] = elements[i];
}
elements = newElements;
System.out.println("扩容");
}
public String toString() {
StringBuilder string = new StringBuilder();
string.append("size=").append(size).append(",[");
for(int i = 0;i<size;i++)
{
string.append(elements[i]);
if(i!=size-1)
{
string.append(",");
}
}
string.append("]");
return string.toString();
}
}
java数据结构之动态顺序表
最新推荐文章于 2024-04-10 00:36:34 发布