0

整数をArrayListの配列にマップするハッシュマップがあります。たとえば、私のデータ構造は次のとおりです。

7->((7,5,**4,3,1**),(7,6,4,3,1))
4->((4,2,1),(4,3,1))

ここで、7 がキーで、たとえば arraylist は (7,5,4,3,1) で、arraylist の配列は ((7,5,4,3,1),(7,6,4,3) です。 ,1))

4 がキーで、たとえば arraylist は (4,2,1) で、arraylist の配列は ((4,2,1),(4,3,1)) です。

キー値 (特定の配列リスト内) とそれに続く値を置き換えて、他の配列リストを作成したいと考えています。この一例を以下に示します。

7->((7,5,**4,2,1**),(7,6,4,2,1),(7,5,4,3,1),(7,6,4,3,1))

私が得ていないのは、この置換を取得する方法です....より大きな配列リストを作成する

私が得ていないのは、この置換を取得する方法です....より大きな配列リストを作成するには..データ構造を知っています..しかし、次の例で示すように、置換によって配列リストを作成したい

これを達成できるJavaプログラミングの方法はありますか?私はJavaプログラミングの初心者です...これについて長い間考えましたが、それを動かすことができませんでした...誰か助けてください

4

6 に答える 6

3
HashMap<Integer,ArrayList<ArrayList<Integer>>> map;
map = new HashMap<Integer,ArrayList<ArrayList<Integer>>>();

編集:答えを読みやすくするために2行を使用しました。

于 2012-10-29T20:47:13.740 に答える
1

あなたは実際に何が欲しいですか?

以下のコードは役に立ちますか?

Map<Integer, List<List<Integer>>> mapData = new HashMap<Integer, List<List<Integer>>>();

public void fillData(List<List<Integer>> lists)
{
    // provide any kind of list of list
    // e.g lists = {2,3,5,3}, {4,5,3,2}, {2,4,3}, {6,3,4}
    for(List<Integer> list : lists)
    {
        int mapKey = list.get(0);
        if(mapData.get(mapKey) == null)
        {
            // list of list will be null in first occurence of key(first element of list).
            // create list of list and put tat in map.
            List<List<Integer>> tempListOfList = new ArrayList<List<Integer>>();
            tempListOfList.add(list);
            mapData.put(mapKey, tempListOfList);
        }
        else
        {
            // from second occurence of same key.
            // put list in the list of list of that key.
            List<List<Integer>> listOfListInMap = mapData.get(mapKey);
            listOfListInMap.add(list);
        }
    }
}

public List<List<Integer>> getListsByKey(int key)
{
    // get list of list by mapKey
    return mapData.get(key);
}
于 2012-10-29T21:27:50.837 に答える
0

List of Lists の使用を検討し、これを Map データ構造の一部として保存します。考えられる方法の 1 つは次のとおりです。

Map<Integer,List<List<Integer>>> map = new HashMap<Integer, List<List<Integer>>>();

//How to add
List<List<Integer>> list = map.get(your_key);
if(list == null){ //This should be for the first time you're accessing the map with the key
 list = new ArrayList<List<Integer>>();
}
//Create a inner list which will store the list of numbers
ArrayList<Integer> innerList = new ArrayList<Integer>();
innerList.add(integer_values);

//Add inner list to the list of lists
list.add(innerList);

//Finally put the list of list into the map with the key
map.put(your_key, list);

編集:新しい要素を追加するリストのインデックスを知っていると仮定します:

//Adding numbers to the inner list - assume you know the index 
List<List<Integer>> list = map.get(key);
if(list == null || list.size() >= index){ //There's no list against the key or the size of the list is less then the index requested
 return;
}

//Add new elements to the inner list
List<Integer> innerList = list.get(index);
innerList.add(your_new_int_values);

//Add inner list to the list of lists
list.add(innerList);

//Finally put the list of list into the map with the key
map.put(key, list);
于 2012-10-29T20:54:19.433 に答える
0

以下でそれを行う必要があります:

   Map<Integer, ArrayList <ArrayList<Integer>>> map = new hashMap<>();
于 2012-10-29T20:48:16.470 に答える
0

HashMap<Integer, ArrayList<ArrayList<Integer>>>.

于 2012-10-29T20:48:30.200 に答える
0

整数を整数のリストのリストにマップします。これは次のように宣言できます。

Map<Integer, List<List<Integer>>> map = new HashMap<List<List<Integer>>>();

次に、ArrayList<List<Integer>>(または を実装する他のクラスList) のインスタンスを配置し、そのようなリストのリストごとに、 のインスタンスを追加できますArrayList<Integer>

次に、このメソッドを使用して、List.subList()選択したサブリストをマップ内の他のエントリに配置できます。

2 つのリストを含むリストが(7,5,4,3,1)あり、 key の下に(7,6,4,3,1)格納7する必要があるリストのリストを作成したいとします4。あなたはこれを行うことができます:

List<List<Integer>> sevens = map.get(7);
List<List<Integer>> fours = new ArrayList<List<Integer>>();
for (List<Integer> aSevenList : sevens) {
    int index = aSevenList.indexOf(4);
    if (index >= 0) {
        fours.add(aSevenList.subList(index, aSevenList.size()));
    }
}
map.put(4, fours);

あるリストを別のリストの一部として置き換えたい場合、次のコード フラグメントはその方​​法を示しています。

int[] vals = { 7, 6, 5, 4, 3, 2, 1 };
List<Integer> list = new ArrayList<Integer>();
for (int val : vals) list.add(val);
List<Integer> sub = new ArrayList<Integer>();
sub.add(40);
sub.add(30);
sub.add(20);
System.out.println("Original list: " + list);
List<Integer> slice = list.subList(3, vals.length - 1);
slice.clear();
slice.addAll(sub);
System.out.println("Modified list: " + list);

これにより、次の出力が生成されます。

元のリスト: [7, 6, 5, 4, 3, 2, 1]
変更されたリスト: [7, 6, 5, 40, 30, 20, 1]

サブリストへの変更は、元のリストに反映されることに注意してください。

于 2012-10-29T20:48:31.770 に答える