Java:将一对元素插入到链表中

时间:2014-05-27 00:06:50

标签: java list generics interface linked-list

我是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中,但需要它能够区分单个和对。

2 个答案:

答案 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>>();