遍历二维列表并将元素放入哈希表中
Iterating though a 2D list and put the elements in a Hashtable
我有一个点坐标列表,想遍历一个二维列表,然后处理哈希函数中的元素以生成我的哈希表的键。
我有点难以遍历 List> 点,以及如何将坐标 (x,y) 作为值传递给哈希表 (key,value)?
public static List<List<Integer>> myMethod(int k, List<List<Integer>> points){
Hashtable pt = new Hashtable();
for (int i = 0; i <points.size(); i++)
{
for (int j = 0; j < points.get(i).size(); j++)
{
Integer x = points.get(i);
Integer y = points.get(j);
pt.put(hashfunction( x, y), points.get(i));
}
}
//return list of pairs ;
}
for (int i = 0; i <points.size(); i++) {
List<Integer> in = points.get(i);
for (int j = 0; j < in.size() - 1; j++) {
Integer x = in.get(j);
Integer y = in.get(j + 1);
pt.put(hashfunction(x, y), points.get(i));
}
}
您应该能够通过使用一些更准确地反映您的数据的数据结构来帮助自己。如果您有点数据,请考虑使用 Pair
,那么您的 List
点实际上就是这样!
接下来,Java
内的所有Map
结构都会计算自己的哈希值,你不需要这样做!不过,您将需要计算所需的密钥。从您的代码片段中,您根本不清楚为什么要 Hashtable/Map
- 它是一个永远不会读取的局部变量,并且会在方法执行后立即进行垃圾收集。因此,我猜你想要 return 那个。如果是这样你可以这样做:
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.collect.Lists;
public class TwoDimArray {
public static Integer keyCalculator(Pair<Integer, Integer> point) {
return point.getLeft() * point.getRight();
}
public static Map<Integer, Integer> myMethod(List<Pair<Integer, Integer>> points) {
return points.stream()
.collect(Collectors.toMap(p -> keyCalculator(p), p -> p.getRight()));
}
public static void main(String[] args) {
Pair<Integer, Integer> pointA = Pair.of(1, 2);
Pair<Integer, Integer> pointB = Pair.of(3, 4);
Pair<Integer, Integer> pointC = Pair.of(5, 6);
List<Pair<Integer, Integer>> points = Lists.newArrayList(pointA, pointB, pointC);
System.out.println("Points map: " + myMethod(points));
}
}
输出:
Points map: {2=2, 12=4, 30=6}
我有一个点坐标列表,想遍历一个二维列表,然后处理哈希函数中的元素以生成我的哈希表的键。 我有点难以遍历 List> 点,以及如何将坐标 (x,y) 作为值传递给哈希表 (key,value)?
public static List<List<Integer>> myMethod(int k, List<List<Integer>> points){
Hashtable pt = new Hashtable();
for (int i = 0; i <points.size(); i++)
{
for (int j = 0; j < points.get(i).size(); j++)
{
Integer x = points.get(i);
Integer y = points.get(j);
pt.put(hashfunction( x, y), points.get(i));
}
}
//return list of pairs ;
}
for (int i = 0; i <points.size(); i++) {
List<Integer> in = points.get(i);
for (int j = 0; j < in.size() - 1; j++) {
Integer x = in.get(j);
Integer y = in.get(j + 1);
pt.put(hashfunction(x, y), points.get(i));
}
}
您应该能够通过使用一些更准确地反映您的数据的数据结构来帮助自己。如果您有点数据,请考虑使用 Pair
,那么您的 List
点实际上就是这样!
接下来,Java
内的所有Map
结构都会计算自己的哈希值,你不需要这样做!不过,您将需要计算所需的密钥。从您的代码片段中,您根本不清楚为什么要 Hashtable/Map
- 它是一个永远不会读取的局部变量,并且会在方法执行后立即进行垃圾收集。因此,我猜你想要 return 那个。如果是这样你可以这样做:
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.collect.Lists;
public class TwoDimArray {
public static Integer keyCalculator(Pair<Integer, Integer> point) {
return point.getLeft() * point.getRight();
}
public static Map<Integer, Integer> myMethod(List<Pair<Integer, Integer>> points) {
return points.stream()
.collect(Collectors.toMap(p -> keyCalculator(p), p -> p.getRight()));
}
public static void main(String[] args) {
Pair<Integer, Integer> pointA = Pair.of(1, 2);
Pair<Integer, Integer> pointB = Pair.of(3, 4);
Pair<Integer, Integer> pointC = Pair.of(5, 6);
List<Pair<Integer, Integer>> points = Lists.newArrayList(pointA, pointB, pointC);
System.out.println("Points map: " + myMethod(points));
}
}
输出:
Points map: {2=2, 12=4, 30=6}