0

我有一个哈希映射,它将整数映射到 ArrayLists 数组。例如,我的数据结构如下:

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

这里,7是key,arraylist eg是(7,5,4,3,1),arraylist的数组依次是((7,5,4,3,1),(7,6,4,3 ,1))

4是key,arraylist eg是(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

下面应该这样做:

   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()方法将选定的子列表放入地图中的其他条目中。

假设您有一个包含两个列表(7,5,4,3,1)(7,6,4,3,1)存储在下面7的列表,并且您想要构建应该存储在 key 下的列表列表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 回答
0

考虑使用 List of Lists 并将其存储为 Map 数据结构的一部分。一种可能的方法如下:

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 回答