我有一个哈希映射,它将整数映射到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编程的新手...我很想过这个但是无法移动它...有人可以帮忙吗
答案 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);