0
点赞
收藏
分享

微信扫一扫

自己实现一个ArrayList

color_小浣熊 2022-01-08 阅读 113
数据结构

目录

一、主函数

二、属性

三、构造方法

四、方法

实现扩容kuorong()

1.把元素尾插到顺序表末尾            add(String elem)

2.按元素插入到任意中间位置        add(int index,String elem)

3.按照下标位置删除元素               remove(int index)

4.按照元素的值来删除元素            remove(String elem)

5.根据下标获取元素                       get(int index)

6.根据下标修改元素                       get(int index)

7.判断元素是否存在                       contains(String elem)

8.查找元素位置                              indexOf(String elem)

9.查找元素位置(从后往前找)     lastindexOf(String elem)

10.清空元素                                   clear()

11.大小                                           size()

12.是否为空                                   isEmpty()

五、调用方法(只举例其中一个调用)


一、主函数

    public static void main(String[] args) {
addTest();//添加
removeTest();//删除
getsetTest();//获取、修改
containsAndindexofTest();//是否存在、查找
clearsizeisEmptyTest();//清空、大小、是否为空
}

二、属性


private String[] data;
//当前顺序表中有效元素个数
private int size=0;
//当前顺序表中最大容纳元素个数,如果size超过了capacity,就需要扩容
private int capacity=100;

三、构造方法

public myArrayList() {
data=new String[capacity];
}

四、方法

实现扩容kuorong()

private void kuorong(){
//先把capacity变大,变大公式,可以随意来确定
capacity=2*capacity;
String[] newData=new String[capacity];
//把旧的数组中的数据拷贝到新数组中
for (int i=0;i<data.length;i++){
newData[i]=data[i];
}
//把新的大的数组赋值给原有的属性data,同时会释放掉旧的数组
data=newData;
}

1.把元素尾插到顺序表末尾add(String elem)

public void add(String elem){
//直接把新的元素放到size的位置上即可
if (size>=capacity){
//需要先扩容
kuorong();
}
data[size]=elem;
size++;
}

2.按元素插入到任意中间位置add(int index,String elem)

public void add(int index,String elem){
//如果index=size,相当于把新元素插到末尾
if (index<0||index>size){
return;
}
if (size>capacity){
kuorong();
}
//把elem放到index位置上,不能覆盖掉已有元素
//需要把index位置元素,依次往后搬运,给index位置腾出空闲位置,放elem
for (int j=size-1;j>=index;j--){
data[j+1]=data[j];
}
data[index]=elem;
size++;
}

3.按照下标位置删除元素remove(int index)

public  String remove(int index){
if (index<0||index>=size){
return null;
}
for (int i=index;i<size-1;i++){
data[i]=data[i+1];
}
size--;
return data[index];
}

4.按照元素的值来删除元素remove(String elem)

public boolean remove(String elem){
int index=0;
for (;index<size;index++){
if (data[index].equals(elem)){
break;
}
}
if (index>=size){
//没有找到,删除失败
return false;
}
//找到匹配的元素了,从index位置开始进行搬运
for (int i=index;i<size-1;i++){
data[i]=data[i+1];
}
size--;
return true;
}

5.根据下标获取元素

public String get(int index){
if (index<0||index>=size){
return null;
}
return data[index];
}

6.根据下标修改元素get(int index)

public void set(int index,String elem){
if (index<0||index>=size){
System.out.println("下标越界");
}
data[index]=elem;
}

7.判断元素是否存在contains(String elem)

public boolean contains(String elem){
for (int i=0;i<size;i++){
if(data[i].equals(elem)){
return true;
}
}
return false;
}

8.查找元素位置indexOf(String elem)

public int indexOf(String elem){
for (int i=0;i<size;i++){
if (data[i].equals(elem)){
return i;
}
}
return -1;
}

9.查找元素位置(从后往前找)lastindexOf(String elem)

 public int lastindexOf(String elem){
for (int i=size-1;i>=0;i--){
if (data[i].equals(elem)){
return i;
}
}
return -1;
}

10.清空元素clear()

public void clear(){
size=0;
}

11.大小size()

public int size(){
return size;
}

12.是否为空isEmpty()

public boolean isEmpty(){
return size==0;
}

五、调用方法(只举例其中一个调用)

private static void addTest(){
myArrayList myArrayList=new myArrayList();
myArrayList.add("c");
myArrayList.add("c1");
myArrayList.add("c2");
myArrayList.add("c3");
System.out.println(myArrayList);
myArrayList.add(2,"aa");
System.out.println(myArrayList);
举报

相关推荐

0 条评论