2016-04-26 6 views
1

私はjavaで非常に新しいです。私はある種の複雑な配列を作成したい。私はアイテム・クラスを作成して、配列内の3インスタンスを保存することを好むはありませんJavaでリストを作成

-item 
    ref:GH987 
    size:22 
    date:1992 
-item 
    ref:98KJ 
    size:27 
    date:2000 
-item 
    ref:ZXJ212 
    size:24 
    date:1999 

のように私のデータが見えます

...そのと呼ばれるリスト/コレクション/マップを考えます。 私はMapと呼ばれるものを見つけましたが、実際に私を混乱させました。データを作成した後に値にアクセスするにはどうすればよいか分かりません。これで始める方法を教えてください。

final Map<String, List<String>> data = new LinkedHashMap<String, List<String>>(); 
data.put("item", new LinkedList<String>()); 
+1

_Iアイテム・クラスを作成することを好むとarray._なぜで3インスタンスを格納しません。そして、あなたはすぐrefメンバーがどのように見えるそのキーに基づいて、特定のアイテムにアクセスするためにMapを使用することができますない?あなたのスニペットに '-item'とは何ですか?それは鍵ですか?そうであれば、 'Map'が重複キーでどのように動作すると思いますか?それは単に情報の種類のラベルですか? – Savior

+2

このhttp://beginnersbook.com/java-collections-tutorials/を読んでください。マップのセクションにはさまざまなタイプがリストされています。マップは、基本的にペアのコレクションです。あなたが要素の順序を気にしないなら、HashMapを使うことができます。要素を保存して取得する方法の例があります – FearlessHyena

+2

アイテムクラスを作成する必要があります。その後、必要に応じてリストまたはマップを使用することができます。 – yogidilip

答えて

2

のような値を格納することができ、それはOOPの全体のポイントです!

非常に最小限例:

public class Item { 
    public String ref; 
    public int size; 
    public int date; 
    public Item(String ref, int size, int date) { 
     this.ref = ref; 
     this.size = size; 
     this.date = date; 
    } 
} 

そして、それだけでList<Item>だとあなたはmyList.get(i).refなどで各パーツにアクセスすることができます:あなた本当にがにMapを使用したい場合は、

List<Item> l = new ArrayList<>(); 
l.add(new Item("GH987", 22, 1992)); 
l.add(new Item("98KJ", 27, 2000)); 
... 
for (Item it : l) 
    System.out.println("Ref: "+item.ref+", size: "+item.size+", date: "+item.date); 

各属性を格納するには、という固有キーが何であるか考えなければなりません。さんがStringである、それはrefだとしましょう:

Map<String,Integer> sizes = new LinkedHashMap<>(); // LinkedHashMap keeps the insert order 
Map<String,Integer> dates = new LinkedHashMap<>(); 

sizes.put("GH987", 22); 
dates.put("GH987", 1992); 
sizes.put("98KJ", 27); 
dates.put("98KJ", 2000); 

それは、それらが単一のインスタンスにバンドルされていないとして、すべてのメンバーにアクセスすることは困難です。ここ

String ref = "GH987"; 
System.out.println("Ref: "+ref+", size: "+sizes.get(ref)+", date: "+dates.get(ref)) 

あなたが、もしMapを認識すべきです更新されていない場合は、値にnullが返されますので、一貫性を自分で処理する必要があります。また、単一の属性を格納するために非常に多くのオブジェクトを作成するのは痛みです。ネイティブタイプの代わりにNumberサブクラス(例:Integer)があり、はるかに効率的です。

自分の好きなことをして、Itemクラスを作成してください。

myMap.put(ref, new Item(ref, size, date)); 
Item it = myMap.get(ref); 
... 
-1

はいあなたはクラスで地図を選択し、それは参照が一意であると仮定すると、元

Map<String,Item> map = new HashMap<>(); 

ための鍵となる基準だ持つことができます。あなたはにItemクラスを作成する必要があり

map.put(item.getReference(),item); 
関連する問題