Java 每次运行此代码时,可观察列表插入顺序都会更改。如何解决这个问题?

Java 每次运行此代码时,可观察列表插入顺序都会更改。如何解决这个问题?,java,javafx,Java,Javafx,我想比较两个列表,但这个tableview只接受可观察列表。这个列表总是更改其插入顺序,这很难进行比较。如何保持列表的插入顺序 提前谢谢 public class MapCompare extends Application { TableView<ECOitem> ecotable; @Override public void start(Stage arg0) throws Exception { VBox v=new VBox();

我想比较两个列表,但这个tableview只接受可观察列表。这个列表总是更改其插入顺序,这很难进行比较。如何保持列表的插入顺序

提前谢谢

public class MapCompare extends Application {
    TableView<ECOitem> ecotable;
    @Override
    public void start(Stage arg0) throws Exception {
        VBox v=new VBox();
        ecotable = new TableView<>();

        TableColumn<ECOitem, String> changeColoumn = new TableColumn<>("Change");
        changeColoumn.setMinWidth(200);
        changeColoumn.setCellValueFactory(new PropertyValueFactory<>("change"));

        TableColumn<ECOitem, String> changeAnalystColoumn = new TableColumn<>("Change Analyst");
        changeAnalystColoumn.setMinWidth(200);
        changeAnalystColoumn.setCellValueFactory(new PropertyValueFactory<>("changeAnalyst"));

        TableColumn<ECOitem, String> cycleTimeColoumn = new TableColumn<>("Cycle Time");
        cycleTimeColoumn.setMinWidth(200);
        cycleTimeColoumn.setCellValueFactory(new PropertyValueFactory<>("cycleTime"));

        ecotable.setItems(getProduct());

    }

    private ObservableList<ECOitem> getProduct() {

        Map<ECOitem, String> data = new HashMap<ECOitem, String>();
        data.put(new ECOitem("ECO1001223", "sharon", "68:20:32:31"), "1");
        data.put(new ECOitem("ECO1001266", "anna", "52:21:59:53"), "2");
        data.put(new ECOitem("ECO1001258", "sharon.bosman", "48:0:47:33"), "3");
        data.put(new ECOitem("ECO1001255", "shar", "48:0:46:15"), "4");
        data.put(new ECOitem("ECO1001256", "bosman", "48:0:43:39"), "5");
        data.put(new ECOitem("ECO1001257", "shaman", "42:19:11:32"), "6");

        ObservableList<ECOitem> products = FXCollections.observableArrayList();

        for (Map.Entry<ECOitem, String> value : data.entrySet()) {
            products.add(value.getKey());
        }
        System.out.println(products);

System.out.println(products);
        return products;
    }

    public static void main(String[] args) {
        launch(args);
    }

}
公共类MapCompare扩展了应用程序{
表视图生态表;
@凌驾
public void start(阶段arg0)引发异常{
VBox v=新的VBox();
ecotable=newtableview();
TableColumn ChangeColumn=新的TableColumn(“变更”);
变更集合最小宽度(200);
changeColoumn.setCellValueFactory(新属性ValueFactory(“变更”));
TableColumn ChangeAnalystColumn=新的TableColumn(“变更分析师”);
ChangeAnalystColumn.setMinWidth(200);
ChangeAnalystColumn.setCellValueFactory(新属性ValueFactory(“changeAnalyst”));
TableColumn cycleTimeColoumn=新的TableColumn(“循环时间”);
环基色组最小宽度(200);
cycleTimeColoumn.setCellValueFactory(新属性ValueFactory(“cycleTime”));
setItems(getProduct());
}
私有可观察列表getProduct(){
映射数据=新的HashMap();
新的生态项目(“ECO1001223”,“sharon”,“68:20:32:31”),“1”);
新的生态项目(“ECO1001266”,“安娜”,“52:21:59:53”),“2”);
新的生态项目(“ECO1001258”,“sharon.bosman”,“48:0:47:33”),“3”);
数据。put(新的生态项目(“ECO1001255”,“shar”,“48:0:46:15”),“4”);
新的生态项目(“ECO1001256”、“bosman”、“48:0:43:39”)、“5”);
数据。put(新的ECOitem(“ECO1001257”,“萨满”,“42:19:11:32”),“6”);
ObservableList products=FXCollections.observableArrayList();
for(Map.Entry值:data.entrySet()){
products.add(value.getKey());
}
系统输出打印(产品);
系统输出打印(产品);
退货产品;
}
公共静态void main(字符串[]args){
发射(args);
}
}

这是因为您以前创建的
HashMap
不能保证维护订单

可观察的
ArrayList
确实维持了秩序

如果这里的秩序很重要。为此,您必须使用正确的数据结构


这正是你要找的。它是一个
HashMap
例外,它以插入顺序在项目上迭代。

我不认为ObservableList改变了顺序,因为HashMap每次都在改变顺序如果你想保持HashMap的顺序,使用LinkedHashMap而不是HashMap解决了这个问题,谢谢@HamzaShahidAli