代替arraylists

时间:2012-10-29 20:45:45

标签: java

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

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))

我希望替换键值(在任何给定的arraylist中)和它后面的值来创建其他arraylists,下面给出一个例子:

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

我没有得到的是如何获得这种替代......以创造更大的arraylists

我没有得到的是如何获得这种替换....创建更大的arraylists ..我知道数据结构..但是想要通过替换来创建arraylists,如后续示例中所示

在Java编程中是否有某种程度可以实现这一点? 我是Java编程的新手...我很想过这个但是无法移动它...有人可以帮忙吗

6 个答案:

答案 0 :(得分:3)

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

编辑:我使用了2行,这样我的答案就更具可读性了。

答案 1 :(得分: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);
}

答案 2 :(得分:0)

下面的

应该这样做:

   Map<Integer, ArrayList <ArrayList<Integer>>> map = new hashMap<>();

答案 3 :(得分:0)

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

答案 4 :(得分: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,并且您希望构建应存储在密钥{{1}下的列表列表}。你可以这样做:

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);

这将生成以下输出:

  

原始列表:[7,6,5,4,3,2,1]
  修改清单:[7,6,5,40,30,20,1]

请注意,对子列表的更改会传播到原始列表。

答案 5 :(得分:0)

考虑使用列表列表并将其存储为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);