java 使用map集合出现的问题

来源:互联网 发布:农村淘宝app家乡版 编辑:程序博客网 时间:2024/04/29 03:37
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;
}

}
0 0
原创粉丝点击