英文:
change one Array list item order relative to another
问题
Ive got 2 Array lists
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);
so the passengerNames array will be
[Ram, Shyam, CPS, John, Steve]
and seatNumber array will be
[1, 84, 19, 99, 78]
I want to sort the seatNumber array in ascending order but I want to change the passengerNames list with it, so when seatNumber is in ascending order like
[1, 19, 78, 84, 99]
the passengerNames array should be sorted like
[Ram, CPS, Steve, Shyam, John]
英文:
Ive got 2 Array lists
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);
so the passengerNames array will be
[Ram, Shyam, CPS, John, Steve]
and seatNumber array will be
[1, 84, 19, 99, 78]
I want to sort the seatNumber array in accending order but I want to change the passengerNames list with it as in when seatNumber is in accending order like
[1,19,78,84,99]
the passengerNames array should be sorted like
[Ram,CPS,Steve,Shyam,Jhon]
答案1
得分: 3
我建议将您的数据封装在一个新的Passenger
对象中,并创建一个类型为Passenger的单个ArrayList - 这样可以保持整洁和灵活。
public class Passenger {
private String name;
private int seatNumber;
public Passenger(String name, int seatNumber) {
this.name = name;
this.seatNumber = seatNumber;
}
}
... 并且用于创建Passenger ArrayList 的部分:
List<Passenger> passengers = new ArrayList<Passenger>(); // 构建Passenger ArrayList
passengers.add(new Passenger("Ram", 1)); // 创建新的Passenger
passengers.add(new Passenger("Shyam", 84)); // 等等...
关于按升序对List进行排序,一个清晰的方法是在Passenger
类中实现Comparable
接口,并在compareTo(Passenger p)
方法中定义行为。一旦按您的喜好定义了该方法,可以通过Collections.sort(passengers);
调用排序。
英文:
I would suggest encapsulating your data in a new Passenger
object and creating a single ArrayList of type Passenger - this should keep things tidy and flexible.
public class Passenger {
private String name;
private int seatNumber;
public Passenger(String name, int seatNumber) {
this.name = name;
this.seatNumber = seatNumber;
}
}
... and for creating the Passenger ArrayList
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...
In regards to sorting the List in ascending order, a clean approach is to implement Comparable
in the Passenger
class, and define the behavior in the compareTo(Passenger p)
method. Once that is defined to your liking, the sort can be called via Collections.sort(passengers);
答案2
得分: 1
代替拥有属于单个实体的两个信息数组,创建一个名为 "Passenger" 的对象,其中你可以赋予姓名和座位号。
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));
然后使用按对象属性排序的方法。
Arrays.sort(passengers, Comparator.comparing(Passenger::getSeatNumber));
英文:
Instead of having two arrays of information that belong to a single entity, create an Object Passenger in which you assign the name and seat number.
public class Passenger {
private String name;
private int seatNumber;
public Passenger(String name, int seatNumber){
this.name = name;
this.seatNumber = seatNumber;
}
// setters and getters
}
Now just create your array of passengers
ArrayList<Passenger> passengers = new ArrayList<Passenger>();
passengers.add(new Passenger("Ram", 1));
Then use a sorting method by Object attribute.
Arrays.sort(passengers, Comparator.comparing(Passenger::getSeatNumber));
答案3
得分: 0
看起来使用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");
在你的情况下,你不需要在构造函数中传递比较器,因为你需要键按升序排列,即它们的自然顺序。很酷的一点是,它们会在不做任何操作的情况下自动排序,当你添加它们时它们会自动排序。
英文:
Looks like it would be more appropriate to use a 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");
You don't need to pass a Comparator in the constructor in your case, because you need the keys to be in ascendent order, that is their natural order. The cool thing is that they will be already sorted without doing anything, they will sort automatically as you add them
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论