I have an ArrayLists
called List<Pair> patternList = new ArrayList<>()
that contains a number of patterns of length 2. for example, for A={1,2,3,4} I create some patterns like (1,3)(3,2)...etc. I want to put these patterns into a 2d array(matrix)[A][A] in way that the patterns must go into a specific index in the matrix, For instance pattern (1,3) must go into index [3][3] or pattern (3,2) must go in [2][2].
我有一个名为List
Thanks.
谢谢。
2 个解决方案
#1
1
If you just want to put them in by the second index. (edited to allow multiple per index):
如果你只想把它们放在第二个索引中。 (编辑为允许每个索引多个):
List<Pair>[][] matrix = new LinkedList<Pair>[5][5]; //Replace 5 here a getter for the maximum value of A
//Here it's 5 because the max of your example is 4.
//Initialize all positions of matrix to empty list.
for (int r = 0; r < matrix.length; r++){
for(int c = 0; c < matrix[r].length; c++){
matrix[r][c] = new LinkedList<Pair>();
}
}
for (Pair p : patternList){
if (matrix[p.second][p.second] == null)
matrix[p.second][p.second] = new LinkedList<Pair>();
matrix[p.second][p.second].add(p);
}
This isn't really using the 2d aspect of the array though; you could accomplish exactly the same thing with a 1d array of lists:
这不是真正使用数组的第二方面;你可以使用一列列表完成同样的事情:
List<Pair>[] arr = new LinkedList<Pair>[5]; //Replace 5 here a getter for the maximum value of A
//Here it's 5 because the max of your example is 4.
//Initialize all positions of array to empty list.
for (int r = 0; r < matrix.length; r++){
arr[r] = new LinkedList<Pair>();
}
for (Pair p : patternList){
if (arr[p.second] == null)
arr[p.second] = new LinkedList<Pair>();
arr[p.second].add(p);
}
#2
0
Since you want to keep more than one element at each position, I suggest you use a Multimap
. A Multimap
is basically a Map<Key, Collection<Value>>
that takes care of creating the collections for you.
由于您希望在每个位置保留多个元素,我建议您使用Multimap。 Multimap基本上是Map
Multimap之
Multimap<List<Integer>, Pair> myMap = ArrayListMultimap.create();
for (Pair p : myPairs){
List<Integer> key = Lists.newArrayList(p.second, p.second);
myPair.put(key, p);
}
#1
1
If you just want to put them in by the second index. (edited to allow multiple per index):
如果你只想把它们放在第二个索引中。 (编辑为允许每个索引多个):
List<Pair>[][] matrix = new LinkedList<Pair>[5][5]; //Replace 5 here a getter for the maximum value of A
//Here it's 5 because the max of your example is 4.
//Initialize all positions of matrix to empty list.
for (int r = 0; r < matrix.length; r++){
for(int c = 0; c < matrix[r].length; c++){
matrix[r][c] = new LinkedList<Pair>();
}
}
for (Pair p : patternList){
if (matrix[p.second][p.second] == null)
matrix[p.second][p.second] = new LinkedList<Pair>();
matrix[p.second][p.second].add(p);
}
This isn't really using the 2d aspect of the array though; you could accomplish exactly the same thing with a 1d array of lists:
这不是真正使用数组的第二方面;你可以使用一列列表完成同样的事情:
List<Pair>[] arr = new LinkedList<Pair>[5]; //Replace 5 here a getter for the maximum value of A
//Here it's 5 because the max of your example is 4.
//Initialize all positions of array to empty list.
for (int r = 0; r < matrix.length; r++){
arr[r] = new LinkedList<Pair>();
}
for (Pair p : patternList){
if (arr[p.second] == null)
arr[p.second] = new LinkedList<Pair>();
arr[p.second].add(p);
}
#2
0
Since you want to keep more than one element at each position, I suggest you use a Multimap
. A Multimap
is basically a Map<Key, Collection<Value>>
that takes care of creating the collections for you.
由于您希望在每个位置保留多个元素,我建议您使用Multimap。 Multimap基本上是Map
Multimap之
Multimap<List<Integer>, Pair> myMap = ArrayListMultimap.create();
for (Pair p : myPairs){
List<Integer> key = Lists.newArrayList(p.second, p.second);
myPair.put(key, p);
}