如何关联两个ArrayList中的对象,实现成员信息输入与插入排序?
嘿,我来帮你捋清楚这个问题的解决方案~ 首先,你之前用两个ArrayList分别存姓名和ID确实容易出现对应不上的问题,最好的办法是把这两个属性封装成一个实体类,这样后续操作会方便很多。下面是具体的实现步骤:
解决团队成员数据关联与插入排序的方案
第一步:创建TeamMembers实体类
先把姓名和ID封装成一个类,让每个成员的信息绑定在一起,彻底避免索引错位的问题:
public class TeamMembers { private String name; private String id; // 如果ID是数字类型,换成int/long就行 // 构造方法,创建对象时直接赋值 public TeamMembers(String name, String id) { this.name = name; this.id = id; } // Getter方法,排序时需要获取属性值做比较 public String getName() { return name; } public String getId() { return id; } // 重写toString,方便打印查看成员信息 @Override public String toString() { return "团队成员{姓名='" + name + "', ID='" + id + "'}"; } }
第二步:实现用户交替输入功能
用Scanner接收用户输入,交替获取姓名和ID,每输入一组就创建TeamMembers对象存入列表,直到用户输入exit结束:
import java.util.ArrayList; import java.util.Scanner; public class TeamMemberManager { public static void main(String[] args) { ArrayList<TeamMembers> teamList = new ArrayList<>(); Scanner scanner = new Scanner(System.in); System.out.println("请交替输入团队成员的姓名和ID(输入'exit'可结束输入):"); while (true) { System.out.print("请输入姓名:"); String name = scanner.nextLine().trim(); if ("exit".equalsIgnoreCase(name)) { break; } System.out.print("请输入对应ID:"); String id = scanner.nextLine().trim(); if ("exit".equalsIgnoreCase(id)) { break; } // 创建对象并添加到列表 teamList.add(new TeamMembers(name, id)); } scanner.close(); // 先打印原始列表看看效果 System.out.println("\n原始团队成员列表:"); teamList.forEach(System.out::println);
第三步:实现插入排序算法
这里提供两种排序方式,你可以根据需求选择调用:
// 调用按姓名排序的方法 insertionSortByName(teamList); System.out.println("\n按姓名排序后的列表:"); teamList.forEach(System.out::println); // 如果需要按ID排序,调用下面这个方法就行 // insertionSortById(teamList); // System.out.println("\n按ID排序后的列表:"); // teamList.forEach(System.out::println); } // 按姓名进行插入排序(字典序) private static void insertionSortByName(ArrayList<TeamMembers> list) { for (int i = 1; i < list.size(); i++) { TeamMembers currentMember = list.get(i); int j = i - 1; // 把比当前成员姓名大的元素往后移 while (j >= 0 && list.get(j).getName().compareTo(currentMember.getName()) > 0) { list.set(j + 1, list.get(j)); j--; } // 把当前成员插入到正确位置 list.set(j + 1, currentMember); } } // 按ID进行插入排序(如果ID是数字,改成数值比较即可) private static void insertionSortById(ArrayList<TeamMembers> list) { for (int i = 1; i < list.size(); i++) { TeamMembers currentMember = list.get(i); int j = i - 1; // 字符串ID按字典序比较,如果是数字ID,换成Integer.parseInt()后比较数值 while (j >= 0 && list.get(j).getId().compareTo(currentMember.getId()) > 0) { list.set(j + 1, list.get(j)); j--; } list.set(j + 1, currentMember); } } }
一些小补充
- 用实体类封装后,再也不用担心姓名和ID对应不上的问题,增删改查都更安全。
- 插入排序的逻辑很直观:每次把当前元素插入到前面已经有序的序列中,适合小规模数据排序。
- 如果ID是数字类型,只需要把
TeamMembers里的id字段改成int或long,排序时直接比较数值即可(比如list.get(j).getId() > currentMember.getId())。
内容的提问来源于stack exchange,提问作者user9722579
相关产品推荐
相关产品推荐

