实现ArrayList类

注:此篇博客只是简单实现了ArrayList类,没有用到泛型,指定了元素类型为String,在下一篇博客中会实现带泛型的MyArray类。

  1 public class MyArray {
  2     private String[] data = null;
  3     private int size = 0;
  4     private int capacity = 100;
  5 
  6     public MyArray() {
  7         data = new String[capacity];
  8     }
  9 
 10     public void add(String elem){
 11         // 尾插
 12         if(size>=capacity)
 13             realloc();
 14         data[size] = elem;
 15         size++;
 16     }
 17     public void add(int index, String elem){// 重载:参数个数、顺序、类型不同
 18         // 指定位置插入,index是下标
 19         if(size>=capacity)
 20             realloc();
 21         if(index<0|| index > size)
 22         for(int i = size-1; i >= index; i--){
 23             data[i+1] = data[i];
 24         }
 25         data[index - 1] = elem;
 26         size++;
 27     }
 28     public void remove(int index){
 29         // 指定位置删除,index为下标
 30         if(index < size && index > 0) {
 31             for(int i = index; i < size - 1; i++){
 32                 data[i] = data[i+1];
 33             }
 34             size--;
 35         }
 36     }
 37     public void remove(){
 38         // 尾删
 39         if(size <= 0)
 40             return;
 41         size--;
 42     }
 43     public String get(int index){
 44         // 查找指定位置的元素值
 45         if(index < 0 || index > size-1){
 46             return null;
 47         }
 48         return data[index];
 49     }
 50     public void set(int index, String elem){
 51         // 将index位置的元素进行更新
 52         if(index < 0 || index > size - 1)
 53             return;
 54         data[index] = elem;
 55     }
 56     public boolean contains(String str){
 57         // 判断str是否为列表的元素
 58         for(int i = 0; i<size; i++){
 59             if(data[i].equals(str))
 60                 return true;
 61         }
 62         return false;
 63     }
 64     public int indexOf(String str){
 65         // 求字符串在列表中的索引位置,若出现多次,返回第一个索引
 66         for(int i = 0; i<size; i++){
 67             if(data[i].equals(str))
 68                 return i;
 69         }
 70         return -1;
 71     }
 72     public int lastIndexof(String str){
 73         // 求这个字符串在列表中最后一次出现的索引位置
 74         for(int i = size - 1; i >= 0; i--){
 75             if(data[i].equals(str))
 76                 return i;
 77         }
 78         return -1;
 79     }
 80     public void clear(){
 81         // 清空列表
 82         size = 0;
 83     }
 84     public int size(){
 85         // 求列表长度
 86         return size;
 87     }
 88     public boolean isEmpty(){
 89         // 判空
 90         return size == 0;
 91     }
 92     private void realloc(){
 93         // 扩容操作
 94         capacity*=2;
 95         String[] tmp = new String[capacity];
 96         for(int i = 0; i < data.length; i++){
 97             tmp[i] = data[i];
 98         }
 99         data = tmp;
100     }
101 
102 }

 

posted @ 2021-02-01 16:15  一帆小白  阅读(35)  评论(0编辑  收藏  举报