1 public class Demo { 2 public static void main(String[] args) { 3 MyVector vector = new MyVector(); 4 vector.add("123"); 5 vector.add("abc"); 6 vector.add("中国人"); 7 System.out.println("元素个数为:" + vector.size()); 8 for (int i = 0; i < vector.size(); i++) { 9 System.out.println(vector.get(i)); 10 } 11 } 12 } 13 class MyVector { 14 // 火车头 15 private Cell head; 16 // 添加元素的方法 17 public void add(String data) { 18 // 1.创建车厢存放数据 19 Cell cell = new Cell(data); 20 // 2.查找尾车厢 21 Cell tail = getTail(); 22 // 3.完成挂接 23 // 如果查找到的尾车厢为null,则证明没有车厢,所以创建的车厢即为头车厢 24 if (tail == null) { 25 head = cell; 26 } else {// 将创建的车厢的引用赋值给尾车厢的下一节车厢的引用 27 tail.next = cell; 28 } 29 } 30 // 查找尾车厢的方法 31 private Cell getTail() { 32 // 如果没有头车厢,则返回null 33 if (head == null) { 34 return null; 35 } 36 // 创建一个临时变量,用来存储头车厢的引用来完成尾车厢的查找 37 Cell p = head; 38 // 死循环进行查找,因为不知道到底有多少节车厢 39 while (true) { 40 // 如果车厢的下一节车厢为null,则表示找到了最后一节车厢,跳出循环 41 if (p.next == null) { 42 break; 43 } 44 // 将下一节车厢的引用赋值给临时变量 45 p = p.next; 46 } 47 // 返回尾车厢的引用 48 return p; 49 } 50 // 计算车厢个数的方法 51 public int size() { 52 // 存储车厢的个数 53 int size = 0; 54 // 创建一个临时变量,用来存储头车厢的引用来完成尾车厢的查找 55 Cell p = head; 56 // 死循环进行查找,因为不知道到底有多少节车厢 57 while (true) { 58 // 如果车厢为null,则跳出循环 59 if (p == null) { 60 break; 61 } 62 // 将下一节车厢的引用赋值给临时变量 63 p = p.next; 64 // 车厢个数自增 65 size++; 66 } 67 // 返回车厢的个数 68 return size; 69 } 70 // 获取元素的方法 71 public String get(int index) { 72 // 如果下标大于或等于数组的长度,则抛异常 73 if (index >= size()) { 74 throw new IndexOutOfBoundsException("下标越界"); 75 } else { 76 // 创建一个临时变量,用来存储头车厢的引用来完成尾车厢的查找 77 Cell p = head; 78 // 循环遍历 79 for (int i = 0; i < index; i++) { 80 // 将下一节车厢的引用赋值给临时变量 81 p = p.next; 82 } 83 // 返回找到车厢的数据 84 return p.data; 85 } 86 } 87 // 车厢 88 class Cell { 89 // 数据 90 private String data; 91 // 下一节车厢 92 private Cell next; 93 // 构造方法进行赋值 94 public Cell(String data) { 95 this.data = data; 96 } 97 } 98 }
执行结果:
1 元素个数为:3 2 123 3 abc 4 中国人