此处包括一个泛型线性表抽象类,一个Integer型实现类,一个测试类。
实现了线性表的以下功能:
1.插入
2.删除
3.追加
4.查找
5.取元素
6.判空
7.求长度
以下为代码:
泛型线性表抽象类
LinearList.java:
package orderedlist;
import java.lang.reflect.Array;
public abstract class LinearList<T> {
private int maxSize = 1024;
private int size;
private T arr[];
public LinearList(Class<T> type) {
// arr = (T[])(new Object[this.maxSize]); //错误的生成方式
arr = (T[])(Array.newInstance(type, maxSize));
size = 0;
}
public LinearList(Class<T> type, int maxSize) {
// arr = (T[])(new Object[this.maxSize]); //错误的生成方式
arr = (T[])(Array.newInstance(type, maxSize));
size = 0;
}
public int getMaxSize() {
return maxSize;
}
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
public int getSize() {
return size;
}
public T[] getArr() {
return arr;
}
public void insert(T t, int index) {
if(index > size + 1) {
throw new IllegalArgumentException("out of range, size is " + size);
}
if(size + 1 > maxSize) {
throw new IllegalArgumentException("new element will be out of limits.");
}
size++;
for(int i = size - 1; i >= index + 1; i--) {
arr[i] = arr[i - 1];
}
arr[index] = t;
}
public void add(T t) {
if(size + 1 > maxSize) {
throw new IllegalArgumentException("new element will be out of limits.");
}
arr[size] = t;
size++;
}
public void remove(int index) {
if(index > size) {
throw new IllegalArgumentException(index + " is out of bounds.");
}
for(int i = index + 1; i < size; i++) {
arr[i - 1] = arr[i];
}
arr[size - 1] = null;
size--;
}
public void removeAll(T t) {
if(this.contains(t) == false) {
System.out.println("there is no such element.");
}else {
do {
for(int i = 0; i < size; i++) {
if(arr[i].equals(t)) {
this.remove(i);
break;
}
}
}while(this.contains(t) == true);
}
}
public T getElem(int index) {
if(index > size) {
throw new IllegalArgumentException(index + " is out of bounds.");
}
return arr[index];
}
public int[] getAllIndex(T t) {
int a[] = new int[size];
int index = 0;
for(int i = 0; i < size; i++) {
if(arr[i].equals(t)) {
a[index++] = i;
}
}
int b[] = new int[index];
for(int i = 0; i < index; i++) {
b[i] = a[i];
}
return b;
}
public void printAllIndex(T t) {
int a[] = this.getAllIndex(t);
if(a.length == 0) {
System.out.println("there is no such element.");
}
System.out.println("this element is at following indexes:");
for(int i = 0; i < a.length; i++) {
if(i != a.length - 1) {
System.out.print(a[i] + ", ");
}else {
System.out.println(a[i]);
}
}
}
public boolean isEmpty() {
if(size == 0) {
return true;
}
return false;
}
public boolean contains(T t) {
boolean flag = false;
for(int i = 0; i < size; i++) {
if(arr[i].equals(t)) {
flag = true;
break;
}
}
return flag;
}
}
Integer型实现类
IntergerLinearList.java:
package orderedlist;
public class IntergerLinearList extends LinearList<Integer> {
public IntergerLinearList() {
super(Integer.class);
}
public IntergerLinearList(int maxSize) {
super(Integer.class, maxSize);
}
public String toString() {
String s = "";
for(int i = 0; i < this.getSize(); i++) {
if(i != this.getSize() - 1) {
s += this.getArr()[i].toString() + ", ";
}else {
s += this.getArr()[i].toString();
}
}
return s;
}
}
测试类
IntergerLinearListDemo.java:
package orderedlist;
public class IntergerLinearListDemo {
public static void main(String[] args) {
IntergerLinearList demo = new IntergerLinearList(100);
demo.add(8);
demo.add(10);
demo.add(15);
demo.add(12);
demo.add(3);
demo.add(4);
demo.add(13);
demo.add(1);
demo.add(5);
System.out.println(demo);
System.out.println("================");
demo.insert(99, 1);
System.out.println(demo);
System.out.println("================");
demo.add(21);
System.out.println(demo);
System.out.println("================");
demo.remove(1);
System.out.println(demo);
System.out.println("================");
System.out.println(demo.getElem(3));
System.out.println("================");
demo.insert(77, 7);
demo.insert(77, 2);
demo.insert(77, 4);
demo.insert(77, 10);
demo.insert(77, 11);
System.out.println(demo);
System.out.println("================");
demo.printAllIndex(77);
System.out.println("================");
demo.removeAll(77);
System.out.println(demo);
System.out.println("================");
}
}
输出结果:
8, 10, 15, 12, 3, 4, 13, 1, 5
================
8, 99, 10, 15, 12, 3, 4, 13, 1, 5
================
8, 99, 10, 15, 12, 3, 4, 13, 1, 5, 21
================
8, 10, 15, 12, 3, 4, 13, 1, 5, 21
================
12
================
8, 10, 77, 15, 77, 12, 3, 4, 13, 77, 77, 77, 1, 5, 21
================
this element is at following indexes:
2, 4, 9, 10, 11
================
8, 10, 15, 12, 3, 4, 13, 1, 5, 21
================