2017-02-18 20 views
1

リンクリストを別のリンクリストの特定のインデックスに追加する方法を知りたい。リンクリストの特定ノードにリンクリストを追加する方法はありますか?

enter image description here

を私は「ジョン」にitemを追加したい:私は何をしようとしているの写真。 item2これまで「エイミー」となど

私のコードに:

import java.util.*; 
public class LinkedListTest { 
    public static void main(String args[]) { 

     LinkedList<String> person = new LinkedList<String>(); 
     LinkedList<String> item = new LinkedList<String>(); 
     LinkedList<String> item2 = new LinkedList<String>(); 

     person.add("John"); 
     person.add("Amy"); 
     person.add("Bob"); 
     person.add("Michael"); 


     item.add("Eggs"); 
     item.add("Bread"); 
     item.add("Ham"); 

     item2.add("Toilet roll"); 
     item2.add("Eggs"); 


     for(int i = 0; i < item.size(); i++){ 
     person.addFirst(item.get(i)); 
     } 
     System.out.println(person); 

    } 
} 
+2

良いとオブジェクト指向のソリューション:に文字列(人物名)を入れないでくださいあなたの最初のリンクされたリスト。代わりに 'personName'と' itemsBought'フィールドを持つ 'Customer'クラスを作成してください。後者はそれ自体、リンクされたアイテムのリストへの参照になります。その人のための 'Customer'オブジェクトのリストを作成しましょう。それで、リンクされた商品リストを各顧客に追加するのは簡単で自然なことです。 –

答えて

1

良いとオブジェクト指向のソリューションです:最初のリンクリストに文字列(人名)を入れないでください。フィールドpersonNameitemsBoughtのクラスCustomerを作成してください。後者はそれ自体、リンクされたアイテムのリストへの参照になります。今すぐ人のためのCustomerのオブジェクトのリストを作成します。それで、リンクされた商品リストを各顧客に追加するのは簡単で自然なことです。

あなたが行うことができます。このクラスでは
public class Customer { 

    String personName; 
    List<String> itemsBought; 

    public Customer(String personName) { 
     this.personName = personName; 
     itemsBought = Collections.emptyList(); 
    } 

    public void setItemsBought(List<String> itemsBought) { 
     this.itemsBought = itemsBought; 
    } 

    @Override 
    public String toString() { 
     return personName + " bought " + itemsBought; 
    } 

} 

LinkedList<Customer> person = new LinkedList<>(); 
    LinkedList<String> item = new LinkedList<String>(); 
    LinkedList<String> item2 = new LinkedList<String>(); 

    person.add(new Customer("John")); 
    person.add(new Customer("Amy")); 
    person.add(new Customer("Bob")); 
    person.add(new Customer("Michael")); 


    item.add("Eggs"); 
    item.add("Bread"); 
    item.add("Ham"); 

    item2.add("Toilet roll"); 
    item2.add("Eggs"); 

    person.get(0).setItemsBought(item); 
    person.get(1).setItemsBought(item2); 

    System.out.println(person); 

これは、出力します。

[John bought [Eggs, Bread, Ham], Amy bought [Toilet roll, Eggs], Bob bought [], Michael bought []] 

私は、リストのボトムアップを構築することがより便利に見つけるだろう:にアイテムを追加顧客を追加してから、顧客リストに追加します。名前と項目の両方を受け付けるvarargsコンストラクタを使用すると、さらに便利になります。私たちが行うことができればと思う:

person.add(new Customer("John", "Eggs", "Bread", "Ham")); 
    person.add(new Customer("Amy", "Toilet roll", "Eggs")); 
    person.add(new Customer("Bob")); 
    // etc. 

我々は次のCustomerコンストラクタを変更した場合、我々はできる:

public Customer(String personName, String... itemsBought) { 
    this.personName = personName; 
    this.itemsBought = new LinkedList<>(Arrays.asList(itemsBought)); 
} 
4

あなたはこれを達成するために地図を使用することができます。地図の各キーは「顧客」を表し、LinkedListは各顧客の「アイテム」を格納するために使用することができます。

public class LinkedListTest { 
    public static void main(String args[]) { 
     Map<String, LinkedList<String>> personItems = new LinkedHashMap<>(); 

     LinkedList<String> item = new LinkedList<String>(); 
     LinkedList<String> item2 = new LinkedList<String>(); 

     item.add("Eggs"); 
     item.add("Bread"); 
     item.add("Ham"); 

     item2.add("Toilet roll"); 
     item2.add("Eggs"); 

     personItems.put("John", item); 
     personItems.put("Amy", item2);  


     for(String cust: personItems.keySet()){ 
      System.out.println(personItems.get(cust)); 
     } 

    } 
} 

本の利点のカップルは、次のとおりです。

  1. あなたは名前に基づいて顧客のための項目のリストを調べることができます。
  2. さらに、LinkedHashMapを使用すると、顧客を挿入する順序が保持されます。

は、この情報がお役に立てば幸い!

2

あなたは関連付けアイテムのリストを持つ人にしたいので、あなたが地図にペアを追加する前にリストを初期化することができ、ペアは、地図が同じのために作られて作る、私はまた、コードを追加しました

public static void main(String[] args) { 
     HashMap<String,LinkedList<String>> person = new HashMap<String,LinkedList<String>>(); 
     LinkedList<String> item = new LinkedList<String>(); 
     LinkedList<String> item2 = new LinkedList<String>(); 

     //Add your people into the Map 
     person.put("John",item); 
     person.put("Amy",item2); 
     person.put("Bob",new LinkedList<String>()); 
     person.put("Michael",new LinkedList<String>()); 

     //Add stuff to item for John 
     item.add("Eggs"); 
     item.add("Bread"); 
     item.add("Ham"); 

     //Add stuff to item for Amy 
     item2.add("Toilet roll"); 
     item2.add("Eggs"); 

     //To add stuff for Bob : 
     person.get("Bob").add("Chocolate"); 

     //To add stuff for Michael : 
     person.get("Michael").add("Chips"); 

     //To see what's inside for ONE person : 
     for(String stuff : person.get("John")){ 
      System.out.println(stuff); 
     } 

     //To see ALL : 
     for(String people : person.keySet()){ 
      System.out.println(people+" has bought :"); 
      for(String stuff : person.get(people)){ 
       System.out.println(stuff); 
      } 
     } 
    } 

を、実際に私がLinkedListのは、単純なArrayListのは多分、十分ではあまりにもこれを見て必要があるか分からない:ものを印刷する(コードにコメントを参照してください)あなたが定義しているhttp://www.sergiy.ca/img/doc/java-map-collection-cheat-sheet.gif

+0

ニースチートシート、リンクありがとう。 –

1

をリンクされた文字列のリストとしての人。

明らかに、LinkedListをStringに追加することはできません。

あなたは文字列のリンクリストのリンクリストかもしれない:

LinkedList<LinkedList<String>> person = new LinkedList<>(); 
LinkedList<String> item = new LinkedList<String>(); 
LinkedList<String> item2 = new LinkedList<String>(); 

person.add(new LinkedList<>(Collections.singleton("John"))); 
person.add(new LinkedList<>(Collections.singleton("Amy"))); 
person.add(new LinkedList<>(Collections.singleton("Bob"))); 
person.add(new LinkedList<>(Collections.singleton("Michael"))); 

item.add("Eggs"); 
item.add("Bread"); 
item.add("Ham"); 

item2.add("Toilet roll"); 
item2.add("Eggs"); 

person.get(0).addAll(item); 
person.get(1).addAll(item2); 

System.out.println(person); 

をしかし、その後、あなたは終わるだろう:

  • アイテムをコンセプトに、人の概念を混合します。
  • 特定の人にアクセスするときにインデックスを処理する必要があります。

今後の頭痛に最適です。

好ましい選択は、一貫性のあるデータ構造を維持するためにMap<String, LinkedList<String>>を行くことになります:あなたまで

Map<String, LinkedList<String>> person = new HashMap<>(); 
    LinkedList<String> item = new LinkedList<String>(); 
    LinkedList<String> item2 = new LinkedList<String>(); 

    item.add("Eggs"); 
    item.add("Bread"); 
    item.add("Ham"); 

    item2.add("Toilet roll"); 
    item2.add("Eggs"); 

    person.put("John", item); 
    person.put("Amy", item2); 
    person.put("Bob", new LinkedList<>()); 
    person.put("Michael", new LinkedList<>()); 

    System.out.println(person); 

関連する問題