购物车和购物车条目的设计
1.什么是购物车和购物车条目
一个购物车中可以存储多个购物车条目信息,购物车应该使用集合来表示
购物车条目的信息不完全是商品的信息(比如数量)
购物车:cart shoppingcart
购物车条目:cartitem
2.购物车的设计
购物车的特点:
1.有序 添加的顺序,不是商品编号的顺序
2.添加和删除操作比较多,效率有要求
3.添加和删除必须先查询到,对查询效率也有要求
4.唯一:同一种只能出现一次,会累计数量
条件1必须满足,有序,添加顺序,没有商量
条件2、条件3是效率问题,可以商量
条件4:即使是不唯一的集合List,也可以通过编程实现唯一,可以不考虑
集合类型:
ArrayList:有序,添加顺序,可以考虑;不适合添加和删除,不是最佳方案
但是考虑购物车不可能有很多条目,效率差异不大,可以考虑
即使是不唯一的集合List,也可以通过编程实现唯一
LinkedList:有序,添加顺序,可以考虑;适合添加和删除,可以考虑
但是添加和删除必须先查询,LinkedList查询效率低,不是最佳方案
LinkedList每个节点不仅存数据,还存前后的地址,浪费一些空间 , 不是最佳方案
HashSet:无序,排除
LinkedHashSet:有序,添加顺序;添加和删除效率高,查询效率高。ok?
但是无法判断某个条目是否存在,因为无法确定之前的数量
TreeSet:不是参加顺序,排除
HashMap:无序,排除
LinkedHashMap:有序,添加顺序;添加和删除效率高,查询效率高
能够判断某个条目是否存在吗?能!
使用条目的id作为key,根据key获取条目
TreeMap:不是添加顺序,排除
LinkedHashMap是购物车的天然最佳方案
3.购物车条目的设计
方案1:直接使用Product作为购物车条目
1.购物车提哦啊木不需要Product的所有属性(只关注核心属性)
2.Product中没有购物车条目的数量
可以在Product中增加一个数量自动作为购物车条目使用,但是不是最佳方案
方案2:使用新的类CartItem作为购物车条目
1.商品的关键属性:编号、名称、单价、颜色
2.新增的数量属性amount
IO流——FileInputStream
1.FileInputStream
字节流、输入流、节点流
2.相关操作(1)
如何创建一个输入流对象
InputStream fis = new FileInputStream(new File("d/bjsxt.txt"));
InputStream fis = new FileInputStream("d/bjsxt.txt");
如何读取一个字节
buf = fis.read();
如何关闭流
fis.close();
流不使用的时候一定要关闭。不关闭不会变成垃圾,不仅是堆内存中的数据,还有和硬盘和桑文件的链接资源
3.相关操作(2)
如何读取数据
int len = fis.read(buf);
如何将字节数组变成字符串
new String(buf,0,len)
new String(buf)
IO流——FileOutputStream
1.OutputStream
如果文件不存在,会自动创建
可以替换内容,也可以追加内容
new FileOutputStream(new File("d:/bjsxt1.txt"),true);
2.相关操作
如何创建输出流
OutputStream fos = new FileOutputStream(new File("d:/bjsxt1.txt"),true);
OutputStream fos = new FileOutputStream(new File("d:/bjsxt1.txt"));
OutputStream fos = new FileOutputStream("d:/bjsxt1.txt"); 如何写一个字节的数据
fos.write(n);
字节数组<----->字符串
字节数组==>字符串
new String(buf,0,len)
new String(buf)
字节数组<==字符串
byte buf[] = str.getBytes();