我是Java的新手,我正在尝试将一组元素添加到链接列表中,我的界面包含add single,pair,triple。这是我到目前为止的方法。
list是在构造函数
中声明的链接列表public void addSingle(E item) {
list.add(item);
}
public void addPair(E first, E second) {
E one = first;
E two = second;
LinkedList<E> pairList;
pairList = new LinkedList<E>();
pairList.add(one);
pairList.add(two);
list.addAll(pairList);
}
public static void main(String[] args) {
Lists<String> linkdList = new ConcreteList<String>();
linkdList.addSingle("allan");
linkdList.addPair("abc","def");
}
这会将所有内容添加到linkdList中,但需要它能够区分单个和对。
答案 0 :(得分:1)
执行此操作的一种方法是使用简单的基类型和两种派生类型:它可能看起来像这样(可能有一些语法错误和拼写错误...)
class <E> ListEntry<E> {
}
class <E> SingleValueListEntry extends ListEntry<E> {
E value;
SingleValueListEntry(E value) {
this.value = value;
}
}
class <E> DoubleValueListEntry extends ListEntry<E> {
E first;
E second
SingleValueListEntry(E first, E second) {
this.first = first;
this.second = second;
}
}
public static void <E> addSingle(List<ListEntry<E>> list, E item) {
list.add( new SingleListEntry(item));
}
public static void <E> addPair(List<ListEntry<E>> list, E first, E second) {
list.add( new DoubleListEntry(first,second) );
}
public static void main(String[] args) {
Lists<ListEntry<E>> list = new ConcreteList<ListEntry<E>>();
addSingle(list, "allan");
addPair(list, "abc","def");
for( ListEntry<String> e : list ) {
if( e instanceof SingleValueListEntry<String> ) {
SingleValueListEntry<String> v = (SingleValueListEntry<String>)e;
System.println("Single value : "+v.value);
}
if( e instanceof DoubleValueListEntry<String> ) {
DoubleValueListEntry<String> v = (DoubleValueListEntry<String>)e;
System.println("Single value : "+v.first+", "+v.second);
}
}
}
答案 1 :(得分:0)
以下代码未经测试,但我希望它仍然说明了如何实现这一点。这里的想法是使主数据结构成为列表列表。因此,主列表中的每个条目都是一个包含1,2或3个字符串的列表。
public void addSingle(E item) {
LinkedList<E> singleList = new LinkedList<E>();
singleList.add(item);
list.add(singleList);
}
public void addPair(E first, E second) {
LinkedList<E> pairList = new LinkedList<E>();
pairList.add(first);
pairList.add(second);
list.add(pairList);
}
public void addTriple(E first, E second, E third) {
LinkedList<E> tripleList = new LinkedList<E>();
tripleList.add(first);
tripleList.add(second);
tripleList.add(third);
list.add(tripleList);
}
private List<List<E>> list = new LinkedList<List<E>>();