【问题标题】:change one Array list item order relative to another更改一个数组列表项相对于另一个的顺序
【发布时间】:2020-04-06 09:30:17
【问题描述】:

我有 2 个数组列表

 ArrayList<String> passengerNames= new ArrayList<String>();//stores passenger names
ArrayList<String> seatNumber= new ArrayList<String>();//stores the seat passenger booked 1  seat=1passenger
    passengerNames.add("Ram");
    passengerNames.add("Shyam");
    passengerNames.add("CPS");
    passengerNames.add("John");
    passengerNames.add("Steve");

    seatNumber.add(1);
    seatNumber.add(84);
    seatNumber.add(19);
    seatNumber.add(99);
    seatNumber.add(78);

所以乘客姓名数组将是 [拉姆、希亚姆、CPS、约翰、史蒂夫] 和 seatNumber 数组将是 [1, 84, 19, 99, 78] 我想按升序对座位号数组进行排序,但我想用它更改乘客姓名列表,就像当座位号处于升序时一样 [1,19,78,84,99] 乘客姓名数组应该像这样排序 [拉姆、CPS、史蒂夫、希亚姆、乔恩]

【问题讨论】:

  • 您的问题是什么? “怎么做?”
  • [Mod] - 请编辑您的问题以获得更清晰更具体的问题,如果需要,请添加相关代码示例

标签: java arrays sorting arraylist


【解决方案1】:

我建议将您的数据封装在一个新的Passenger 对象中并创建一个Passenger 类型的单个ArrayList - 这应该使事情保持整洁和灵活。

public class Passenger {
    private String name;
    private int seatNumber;

    public Passenger(String name, int seatNumber) {
        this.name = name;
        this.seatNumber = seatNumber;
    }
}

...以及用于创建乘客数组列表

List<Passenger> passengers = new ArrayList<Passenger>(); // build Passenger ArrayList
passengers.add(new Passenger("Ram", 1)); // create new Passenger
passengers.add(new Passenger("Shyam", 84)); // etc...

关于按升序对列表进行排序,一个干净的方法是在Passenger 类中使用implement Comparable,并在compareTo(Passenger p) 方法中定义行为。一旦根据您的喜好定义,可以通过Collections.sort(passengers);调用排序

【讨论】:

    【解决方案2】:

    不要让两个信息数组属于一个实体,而是创建一个对象乘客,您可以在其中分配姓名和座位号。

    public class Passenger {
    
        private String name;
        private int seatNumber;
    
        public Passenger(String name, int seatNumber){
            this.name = name;
            this.seatNumber = seatNumber;
        }
        // setters and getters
    }
    

    现在只需创建您的乘客数组

    ArrayList<Passenger> passengers = new ArrayList<Passenger>();
    passengers.add(new Passenger("Ram", 1));
    

    然后使用Object属性的排序方法。

    Arrays.sort(passengers, Comparator.comparing(Passenger::getSeatNumber));
    

    【讨论】:

      【解决方案3】:

      看起来使用 SortedMap 会更合适

      SortedMap<Integer, String> map = new TreeMap<>();
      map.put(1, "Ram");
      map.put(84, "Shyam");
      map.put(19, "CPS");
      map.put(99, "John");
      map.put(78, "Steve");
      

      在您的情况下,您不需要在构造函数中传递 Comparator ,因为您需要键按升序排列,这是它们的自然顺序。很酷的是,它们无需执行任何操作就已经排序,它们会在您添加它们时自动排序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        • 1970-01-01
        • 2016-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多