Java二维ArrayList添加元素时所有条目重复问题求助
根因分析
Java的集合类存储的是对象的引用而非拷贝,你在ParkingOffice类中将customerList定义为全局成员变量,全程复用同一个实例:每次调用register方法时,都往同一个customerList中添加元素,再将同一个customerList的引用添加到二维列表customers中。最终customers中所有子列表指向的是同一块内存地址,任意修改都会同步到所有子列表,就出现了所有子列表内容完全重复的问题。
修复步骤
- 删除
ParkingOffice类中冗余的全局customerList成员变量,不需要全局复用这个实例 - 修改
register方法逻辑,每次注册客户时新建独立的子列表实例:
// 修改后的register方法 public Customer register(String customerId, String name, Address address, String phone) { Customer customer = new Customer(customerId, name, address, phone); // 每次新建独立的子列表 List<Customer> subList = new ArrayList<>(); subList.add(customer); this.customers.add(subList); // 原代码中的customer.addCustomers()为冗余代码,Customer类无对应方法建议删除 return customer; }
- 修正测试用例的断言逻辑,你之前直接将
List对象和字符串对比会报错,需要先调用列表的toString()方法再对比:
assertEquals("[[ID: 7g8h9i, Name: Jane, Address: 123 Lane, Anaheim, CA 92801, Phone: 987654321], [ID: 4d5e6f, Name: Joe, Address: 123 Lane, Anaheim, CA 92801, Phone: 987654321]]", customers.toString());
内容的提问来源于stack exchange,提问作者Minh Lam
相关产品推荐
相关产品推荐

