1.泛型元素
public interface Element<T> {
Element getNext();
void setNext(Element t);
T getValue();
void setValue(T t);
}
2.泛型元素的实现
package DoubleDirTable;
public class TElement<T> implements Element<T> {
public TElement(T t){
this.value = t;
}
Element next;
T value;
@Override
public Element getNext() {
return next;
}
@Override
public void setNext(Element t) {
this.next = t;
}
@Override
public T getValue() {
return value;
}
@Override
public void setValue(T t) {
this.value = t;
}
}
3.泛型表
package BaseTable;
import DoubleDirTable.Element;
public interface ITable<T extends Element> {
T head();
T end();
void setHead(T t);
void setEnd(T t);
int len();
void add(T t);
void delete(int index);
void insert(T t,int index);
T get(int index);
}
4.泛型表的实现
package DoubleDirTable;
import BaseTable.ITable;
public class TTable<T extends Element> implements ITable<T> {
T headElement;
T endElement;
int len = 0;
@Override
public T head() {
return headElement;
}
@Override
public T end() {
return endElement;
}
@Override
public void setHead(T t) {
this.headElement = t;
}
@Override
public void setEnd(T t) {
this.endElement = t;
}
@Override
public int len() {
return len;
}
@Override
public void add(T t) {
if (headElement == null){
headElement = t;
endElement = headElement;
len = 1;
return;
}
endElement.setNext(t);
endElement = t;
len++;
}
@Override
public void delete(int index) {
if (len<= 0)
{
return;
}
if (index == 0){
setHead((T)head().getNext());
len--;
return;
}
T selectElement = get(index-1);
if (selectElement.getNext()!= null){
if (selectElement.getNext().getNext()!= null){
selectElement.setNext(selectElement.getNext().getNext());
}else {
endElement =selectElement;
selectElement.setNext(null);
}
}
len--;
}
public Element getIndexElement(int index){
Element selectElement = headElement;
for (int i =0;i<index;i++){
selectElement = selectElement.getNext();
}
return selectElement;
}
@Override
public void insert(T t, int index) {
Element selectElement = getIndexElement(index);
t.setNext(selectElement.getNext());
selectElement.setNext(t);
}
@Override
public T get(int index) {
return (T) getIndexElement(index);
}
}