线性表是一种可以在任意位置插入和删除元素,由n个同类型元素组成的线性结构。主要包括顺序表,单链表,循环单链表,双向链表和仿真链表。应用比较广泛的是顺序表和单链表。 2 下面是线性表的接口,主要操作包括插入元素,删除元素,取得元素,得到线性表元素个数,判断线性表是否为空。 3 package com.linear.table; 4 /** 5 * 操作顺序表的接口方法 6 * @author Mature 7 * 8 */ 9 public interface MatureListInterface { 10 public void add(Object object) throws Exception; 11 public void remove(int index) throws Exception; 12 public Object get(int index) throws Exception; 13 public boolean isEmpty(); 14 public int size(); 15 public void initList(int size); 16 17 } 18 19 顺序表的实现如下: 20 package com.linear.table; 21 /** 22 * 23 * @author Mature 24 * 25 */ 26 public class MatureList implements MatureListInterface { 27 int defaultSize = 10;// 默认容量 28 int size = 0;// 数组元素个数 29 30 Object[] objectList = null;// 存储元素数组 31 32 MatureList() {// 默认容量构造器 33 initList(defaultSize); 34 } 35 36 public MatureList(int listSize) {// 指定容量构造器 37 this.defaultSize = listSize; 38 initList(defaultSize); 39 40 } 41 42 @Override 43 public void initList(int size) { 44 45 objectList = new Object[size]; 46 47 } 48 49 /** 50 * 添加一个元素(从1开始) 51 */ 52 @Override 53 public void add(Object object) throws Exception { 54 if (size == defaultSize) { 55 throw new Exception("顺序表已满,不能继续插入"); 56 57 } else { 58 59 objectList[size] = object;// 进行数组添加 60 size++; 61 } 62 63 } 64 65 /** 66 * 删除指定元素(从1开始) 67 */ 68 @Override 69 public void remove(int index) throws Exception { 70 Object[] objectListTmp = new Object[defaultSize];// 创建一个tmp数组 71 if (index < 0 || index > defaultSize || index > size) { 72 throw new Exception("参数错误,remove数组越界"); 73 74 } else { 75 76 for (int i = index; i <= size - 1; i++) { 77 78 objectList[i - 1] = objectList[i]; 79 80 } 81 System.arraycopy(objectList, 0, objectListTmp, 0, size - 1);// 进行数组复制, 82 objectList = null; 83 this.objectList = objectListTmp;// 将新的数组复制到objectList 84 objectListTmp = null; 85 size--; 86 } 87 88 } 89 90 /** 91 * 获取指定元素(从1开始) 92 */ 93 @Override 94 public Object get(int index) throws Exception { 95 if (index > defaultSize || index < 0) { 96 throw new Exception("参数错误,get数组越界"); 97 98 } else { 99 return objectList[index - 1]; 100 } 101 102 } 103 104 /** 105 * 判断线性表(顺序表)是否为空 106 */ 107 @Override 108 public boolean isEmpty() { 109 if (objectList.length == 0) { 110 111 return true; 112 } else { 113 return false; 114 115 } 116 117 } 118 119 /** 120 * 返回线性表(顺序表)大小 121 */ 122 @Override 123 public int size() { 124 125 return size; 126 } 127 128 } 129 130 测试类: 131 package com.linear.table; 132 /** 133 * 134 * @author Mature 135 *测试类 136 */ 137 public class Test { 138 public static void main(String[] args) throws Exception { 139 MatureList matureList=new MatureList(10); 140 /** 141 * 添加5个元素 142 */ 143 matureList.add("mature1"); 144 matureList.add("mature2"); 145 matureList.add("mature3"); 146 matureList.add("mature4"); 147 matureList.add("mature5"); 148 System.out.println("元素个数:"+matureList.size); 149 System.out.println("元素1:"+matureList.get(1)); 150 System.out.println("元素2:"+matureList.get(2)); 151 System.out.println("元素3:"+matureList.get(3)); 152 System.out.println("删除元素3"); 153 matureList.remove(3);//删除元素1 154 System.out.println("元素个数:"+matureList.size); 155 System.out.println("遍历:"); 156 for(int i=1;i<=matureList.size;i++){ 157 System.out.println("元素:"+matureList.get(i)); 158 159 } 160 } 161 } 162 163 测试效果: 164 元素个数:5 165 元素1:mature1 166 元素2:mature2 167 元素3:mature3 168 删除元素3 169 元素个数:4 170 遍历: 171 元素:mature1 172 元素:mature2 173 元素:mature4 174 元素:mature5