You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关联两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:51:15