java 使用map集合出现的问题

在Java中,Map集合存储对象时实际上存储的是对象的引用。当使用同一个对象实例作为值与不同键关联时,所有键都将指向同一内存地址。这导致无论通过哪个键获取数据,都会得到相同的内容。为解决此问题,可以考虑为每个键创建新的对象实例,例如使用对象数组确保每个键对应不同的对象实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package shop.src;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;


public class BookShop {
//商品的管理类
/*
 * 实现读取商品信息文件
 * ShowBook()方法展示所有的商品信息
 *实现原理解释
 *第一步:读取商城文件
 *第二步:展示商品
 * Buybook()方法实现购买商品
 * 第一步:读取商城文件
 * 更改某种商品的信息
 * 把更改后的信息保存在商城文件中
 * 第二步:把购买信息存入用户的购买文件中
 * */
private String path;
//获取文件的路径
public String GetProjectPath() throws IOException{
File directory = new File("");//参数为空
String FilePath=null;
FilePath = directory.getCanonicalPath();
return FilePath;
}

public Map<Integer, Book> ShowBook() throws IOException
{
path = GetProjectPath()+File.separator+"BookShop.txt";
BufferedReader in= new BufferedReader(new FileReader(path));
String content = "8";
int key = 0;
Map<Integer, Book> map = new LinkedHashMap<Integer, Book>();//这里泛型都是用对象的,基本类型不可
Book BookInfo = new Book();
Book Book1 = new Book();
while(content!=null)
{
content = in.readLine();
if(content != null){
    BookInfo.autoDisassemble(content);

    map.put(key, BookInfo);

//这里有bug,在java中除了基本类型以外,其他的都是存入的地址,这里Bookinfo是一个对象的地址,因为一直使用的是一个对象,所以地址是没有变化的,不用的key值后面,更寻的都是同一一个地址,所以在去数据的时候,都是得到的相同数据

解决办法定义对象数组

    Book1=map.get(key);
System.out.println("while key:"+key+";BOOK:"+Book1.atuoEncapsulation());
    key++;
   }
}
Book1=map.get(0);
   System.out.println("key:"+0+";BOOK:"+Book1.atuoEncapsulation());
return map;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值