我无法从 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;
}