如何将循环采集的多组不同变量数据批量插入到LinkedList中
问题解答
现有代码的已知问题修正
- 变量类型错误:
name和phonenum是字符串类型,不能用int声明,需要改为String类型 - Scanner输入流残留问题:调用
nextInt()读取年龄后,输入缓冲区会残留换行符,会导致后续的nextLine()直接读取到空值,需要额外调用一次nextLine()吃掉残留的换行 - Scanner对象命名不一致:代码里一会用
input一会用sc,需要统一命名
链表和ArrayList的使用差异
如果你用的是Java标准库提供的java.util.LinkedList,插入数据的API调用方式和ArrayList基本一致,二者都实现了List接口,都可以直接调用add()方法插入数据。二者的核心差异在底层实现:ArrayList基于动态数组实现,随机访问更快;LinkedList基于双向链表实现,中间节点的插入、删除效率更高。如果你是自己手写实现链表结构,才需要手动处理节点的指针指向拼接。
批量插入数据到链表的实现逻辑
- 先自定义一个实体类封装
name、age、phonenum三个属性,每次循环获取的一组输入对应一个实体类对象 - 不需要等整个循环结束再存储数据,循环内部每获取到一组完整的用户输入,就可以将对应的实体对象直接添加到链表中
完整可运行参考代码
// 自定义实体类封装用户信息 class User { String name; int age; String phonenum; // 构造方法 public User(String name, int age, String phonenum) { this.name = name; this.age = age; this.phonenum = phonenum; } // 重写toString方便打印查看数据 @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", phonenum='" + phonenum + '\'' + '}'; } }
import java.util.LinkedList; import java.util.Scanner; public class LinkedListTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 声明存储User对象的LinkedList LinkedList<User> userLinkedList = new LinkedList<>(); char stop = 'Y'; while(stop != 'N'){ System.out.println("\nEnter your name : "); String name= sc.nextLine(); System.out.println("\nEnter your age: "); int age= sc.nextInt(); // 吃掉nextInt残留的换行符 sc.nextLine(); System.out.println("\nEnter your phone number: "); String phonenum= sc.nextLine(); // 新建User对象并插入链表 userLinkedList.add(new User(name, age, phonenum)); System.out.println("Enter 'Y' to continue, 'N' to Stop: "); // 统一转大写避免小写输入无法终止循环 stop = sc.nextLine().toUpperCase().charAt(0); } // 测试打印链表中所有数据 System.out.println("\n链表中存储的所有数据:"); for (User user : userLinkedList) { System.out.println(user); } sc.close(); } }
内容的提问来源于stack exchange,提问作者naddy
相关产品推荐
相关产品推荐

