【问题标题】:Java: Inserting a pair of elements into linked listJava:将一对元素插入链表
【发布时间】:2014-05-27 00:06:49
【问题描述】:

我是 Java 新手,我正在尝试将一组元素添加到链表中,我的界面包含添加单、对、三重。这是我目前所掌握的方法。

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");

}

这会将所有内容添加到链接列表中,但需要它能够区分单个和成对。

【问题讨论】:

  • 我不明白这个问题。
  • 使用'区分单对和对',你的意思是它必须能够知道一个元素是使用addSingle方法还是addPair方法添加的?
  • @Ghostkeeper 他想将一对视为链表中的单个对象。我会推荐一个包装类或接口。
  • 或者您可以为主列表中的每个条目使用一个列表。所以整个数据结构变成了一个列表列表。这样做的好处是,如果有一天它需要存储的不仅仅是单曲、双曲和三曲,它仍然可以工作。我认为它也更容易遍历。
  • @RetoKoradi 这正是我想要做的,但不知道如何

标签: java list generics interface linked-list


【解决方案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);
       }
   }
}

【讨论】:

    【解决方案2】:

    以下代码未经测试,但我希望它仍能说明如何实现。这里的想法是使主数据结构成为列表的列表。所以主列表中的每个条目都是一个包含 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>>();
    

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2013-02-17
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多