当前位置: 首页 > 知识库问答 >
问题:

如何根据另一个数组的顺序洗牌数组列表

祁博涛
2023-03-14

我试图通过结合两种算法来返回最佳路径来解决旅行商问题

第一种算法使用环境ArrayList生成最佳路径

第二种算法将优化第一种算法获得的路由,但在这样做时,我需要创建一个新的ArrayList,即环境ArrayList,它被洗牌以匹配最佳路径数组的顺序

请你帮我做这个,因为我在洗牌环境数组列表时遇到了麻烦

这是环境ArrayList,其中每个节点由name、x cords、y cords组成:

 static ArrayList<Node> environment = new ArrayList<Node>(Arrays.asList(
        new Node("1", 19, -121),
        new Node("2", 343, -132),
        new Node("3", 21, -132),
        new Node("4", 47, -122),
        new Node("5", 35, -139),
        new Node("6", -54, 165),
        new Node("7", -45, 21),
        new Node("8", 89, -65),
        new Node("9", 58, -72),
        new Node("10", 21, -54)
));

返回的最佳路径数组:[10, 4, 3, 7, 9, 2, 1, 5, 8, 6]

另外,将数组列表设置为静态也会导致在从python进行洗牌时出现问题,因为它仍然相对较新。

谢谢你的帮助

共有2个答案

壤驷文华
2023-03-14

因为一旦获得最佳路径并对其应用洗牌,就会将ArrayList定义为静态,从而删除最佳路径步骤中的信息。

一旦您将数组排序并洗牌此数组列表,您可以克隆另一个数组,这将将信息保留在环境随机洗牌来自环境的新副本


public class Program {
    
     static ArrayList<Node> environment = new ArrayList<Node>(Arrays.asList(
        new Node("1", 19, -121),
        new Node("2", 343, -132),
        new Node("3", 21, -132),
        new Node("4", 47, -122),
        new Node("5", 35, -139),
        new Node("6", -54, 165),
        new Node("7", -45, 21),
        new Node("8", 89, -65),
        new Node("9", 58, -72),
        new Node("10", 21, -54)
    ));

    static ArrayList<Node> shuffle;

    public static void main(String[] args) {
        // Once get best path
        shuffle = environment.clone();
        // continue your logic
    }
    
}
邵飞鸿
2023-03-14

您可以使用以下方法对ArrayList对象进行洗牌

Collections.shuffle(list);

另外,将数组列表设置为静态也会导致在从python进行洗牌时出现问题,因为它仍然相对较新。

不,静态是表示属性的关键字,它的值对于该类的所有对象都是静态的,可以使用类引用访问,但非静态属性只能通过类对象访问

class MyClass{
    static List<String> staticList = List.of("HI", "Hello");
    List<String> nonStaticList = new ArrayList<>();
}

public static void main(String[] args){
    System.out.println(MyClass.staticList .get(1)); // no errors
    //System.out.println(MyClass.list.get(5)); // error
    
    Myclass myObject = new MyClass();
    System.out.println(myObject.nonStaticList)  // no errors
    System.out.println(myObject.staticList .get(1)); // no errors
}
 类似资料: