0

Javaジェネリックを使用せずに、Javaで単一リンクリストに複数のサブリストを作成する方法について少し苦労しています。オーバーフローで複数の質問を読みましたが、それらのほとんどは問題を解決するためにジェネリックを実装しています。基本的に、Dog、Cat、Snake などの値でリンクされたリストを作成し、次のようなそれぞれのサブリストを作成する構造が必要です。

犬 ---> プードル、レトリーバー

| |

v

猫 ---> シベリア

| |

v

ヘビ ---> コブラ、パイソン

私の主な問題は add メソッドにあると思います:

public void add(String topList, String botList)
    {
        head = new Node(topList, botList, head);
    }

topList: [犬、猫、ヘビ] と botList:[プードル、レトリバー、シベリア、コブラ、パイソン]。

この addMethod では、ヘッド ノードから 2 つの異なるリストに分岐しているだけで、実際に topList を botList の要素にリンクしていないように感じます。

私も試しました:

public void add(String topList, String botList)
    {
        head = new Node(topList, head);
        head = new Node(botList, topList);
    }

しかし、void add メソッドに 2 つの String 変数があるため、うまくいかなかったと確信しています。

私の質問は、どうすれば topList 要素を botList 要素にリンクできるでしょうか? ヘルプやリファレンスをいただければ幸いです。

これは私がこれまでに持っているものです:

  import java.util.*;
  public class animal
  {
    Node head;
    public animal()
    {
        head = null;
    }
    public void add(String topList, String botList)
    {
        head = new Node(topList, botList, head);
    }
    public String toString()
    {
        String x;
        StringBuilder sb = new StringBuilder();
        Node p = head;
        while (p != null)
        {
            sb.append(p.topList + "\n " + p.botList +"\n");
            p = p.next;
        } 
        return new String (sb);
    }
    public static class Node
    {
        String topList;
        String botList;
        Node next;
        public Node (String t, String b, Node n)
        {
            topList = t;
            next = n;
            botList = b;
        }
    }
    public static void main(String args[])
    {
        animal list = new animal();
        list.add("Snake", "python");
        list.add("Dog", "poodle");
        list.add("Cat", "siberian");
        System.out.println(list);
    }
   } 

出力は望ましいものですが、2 つのリストをリンクしていないことはわかっています。また、botList に追加できる名前は 1 つだけで、さらに追加できるようにしたいと考えています。

4

3 に答える 3

1

動物のクラスでは次のメソッドが必要だと思います。

public String get(String animal)
    {
        Node temp = head;
        while (temp!=null)
        {
            if (animal.equals(temp.topList))
            {
                return temp.botList;
            }
            temp = temp.next;
        }
        return null;
    }

そして、本体では次のようになります。

public static void main(String args[])
{
    Animal list = new Animal();

    list.add("Snake", "python,Cobra");
    list.add("Dog", "poodle,Retriever");
    list.add("Cat", "siberian");
    System.out.println(list);
    System.out.println(list.get("Dog"));//shows poodle,Retriever

}
于 2013-02-24T21:30:25.760 に答える
0

このように考えてください。

単一リンクリストの内容には、データとチェーン内の次のノードへの参照のみが含まれます。2番目のリンクリストをデータとして扱うと、ノードを次のように設計できます。

  • 最上位レイヤーでは、作成するすべてのノードがいくつかAnimal(Dog、Cat、およびSnake)になります。
  • AnimalTypeデータレイヤーでは、挿入するすべてのデータが、それに関する情報を含むリンクリストになります。

これでジェネリックを使用することはありませんが、使用するとかなりクリーンになりますが、私は次のようなことを想定しています。

public class Animal {
    private String type;
    private AnimalType classification;

    // usual constructor and accessor
}

public class AnimalType {
    private String typeName;

    // usual constructor and accessor
}

public class AnimalNode {
    private Animal name;
    private AnimalTypeList data;
    private AnimalNode next;

    // usual constructor, accessor and mutator
}

public class AnimalList {  // AnimalList and AnimalTypeList are super similar
    private AnimalNode head;
    // operations and logic on list
}


public class AnimalTypeList {
    private AnimalType head;
    // operations and logic on list
}
于 2013-02-24T21:46:01.337 に答える
0

誤解しているかもしれませんが、これを少し変な方法で構成しているようです。2 つのリストがあります。1 つは主要なタイプ (犬、猫、ヘビ) で、もう 1 つはすべての異なるサブタイプ (プードル、レトリバー、シベリア、コブラ、パイソン) です。

代わりに、最初のリストの各項目は新しいリストにリンクする必要があると思います。つまり、全体で 4 つのリストがあります。

  1. トップリスト: (犬、猫、ヘビ)
  2. 3 サブリスト: (プードル、レトリーバー)、(シベリア)、(コブラ、パイソン)
于 2013-02-24T21:22:46.793 に答える