实现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 }