我无法从 ArrayList<Coord> 获取随机元素
I'm having trouble getting random elements from ArrayList<Coord>
首先,我有 Arraylist“listVertex”存储 DTNHost 的“坐标”。其次,我创建了一个方法来从 listVertex ArrayList 中获取所选索引的随机元素。但是,以下方法会生成新的坐标点,并且 x 和 y 的值会从我指定的初始值发生变化。
伙计们,帮我从顶点列表中获取随机元素,而不必生成新的坐标点并且值 x, y 不会改变。感谢关注
//retrieve node coordinates from DTNHost.
public void getVertex() {
List<DTNHost> allNode = SimScenario.getInstance().getHosts();
for (DTNHost host : allNode) {
if (host.toString().startsWith("kota")) {
listVertex.add(host.getLocation());
}
}
}
//get for random elements from the listVertex ArrayList
public ArrayList<Coord> randomVeretx(int max) {
Random r = new Random();
ArrayList<Coord> result = new ArrayList<Coord>();
for (int i = 0; i < max; i++) {
result.add(new Coord(r.nextDouble() * max, r.nextDouble() * max));
}
return result;
}
从listVertex
(应定义为实例字段)中获取max
个随机元素的简单方法可能如下:
public List<Coord> randomVertex(int max) {
Random r = new Random();
List<Coord> result = new ArrayList<>();
for (int i = 0; i < max; i++) {
result.add(vertexList.get(r.nextInt(vertexList.size())));
}
return result;
}
但是,此实现可能包含来自 vertexList
的重复坐标。
不过只要max
能大于vertexList.size()
就可以了。
另一种获取随机列表的方法是使用 vertexList
:
的混洗
public List<Coord> randomVertex(int max) {
List<Coord> result = new ArrayList<>(vertexList); // copy of vertexList
Collections.shuffle(result);
Random r = new Random(); // or use ThreadLocalRandom.current()
if (max < result.size()) {
// result is shuffled and therefore randomized
// no duplicate vertex appear in the result here
result = result.subList(0, max);
} else { // add randomly more elements
while (result.size() < max) {
result.add(result.get(r.nextInt(result.size())));
}
}
return result;
}
首先,我有 Arraylist“listVertex”存储 DTNHost 的“坐标”。其次,我创建了一个方法来从 listVertex ArrayList 中获取所选索引的随机元素。但是,以下方法会生成新的坐标点,并且 x 和 y 的值会从我指定的初始值发生变化。 伙计们,帮我从顶点列表中获取随机元素,而不必生成新的坐标点并且值 x, y 不会改变。感谢关注
//retrieve node coordinates from DTNHost.
public void getVertex() {
List<DTNHost> allNode = SimScenario.getInstance().getHosts();
for (DTNHost host : allNode) {
if (host.toString().startsWith("kota")) {
listVertex.add(host.getLocation());
}
}
}
//get for random elements from the listVertex ArrayList
public ArrayList<Coord> randomVeretx(int max) {
Random r = new Random();
ArrayList<Coord> result = new ArrayList<Coord>();
for (int i = 0; i < max; i++) {
result.add(new Coord(r.nextDouble() * max, r.nextDouble() * max));
}
return result;
}
从listVertex
(应定义为实例字段)中获取max
个随机元素的简单方法可能如下:
public List<Coord> randomVertex(int max) {
Random r = new Random();
List<Coord> result = new ArrayList<>();
for (int i = 0; i < max; i++) {
result.add(vertexList.get(r.nextInt(vertexList.size())));
}
return result;
}
但是,此实现可能包含来自 vertexList
的重复坐标。
不过只要max
能大于vertexList.size()
就可以了。
另一种获取随机列表的方法是使用 vertexList
:
public List<Coord> randomVertex(int max) {
List<Coord> result = new ArrayList<>(vertexList); // copy of vertexList
Collections.shuffle(result);
Random r = new Random(); // or use ThreadLocalRandom.current()
if (max < result.size()) {
// result is shuffled and therefore randomized
// no duplicate vertex appear in the result here
result = result.subList(0, max);
} else { // add randomly more elements
while (result.size() < max) {
result.add(result.get(r.nextInt(result.size())));
}
}
return result;
}