Java集合框架练习——简易图书管理

JAVA集合框架的应用练习

这几日学习了Java集合框架的相关知识,为了巩固对集合框架中一些具体实现接口的学习和使用,特意做了一个针对性的练习题。

下面让我们一起来看一下吧~

图书管理存储:
在图书管理系统中为了方便管理图书,将图书划分为几个类别。每个类别下有很多图书,每本图书都有相对应的类别,这就具备了一对多的关系映射,即一个类别对应多本图书。在这种情况下就可以使用
Map 映射来存储类别和图书信息,其键为 Category(类别) 类型,值为 List 类型(Book
类为图书类),然后使用嵌套循环遍历输出每个类别所对应的多个图书信息。

我们来分析一下这个系统的实现原理

具体的实现步骤如下:

(1) 创建表示图书类别的 Category 类,在该类中有两个属性:id 和 name,分别表示编号和类别名称,并实现了它们的 setXxx() 和 getXxx() 方法。

(2) 创建表示图书明细信息的 BookInfo 类,在该类中包含 5 个属性:id、name、price、author 和 startTime,分别表示图书编号、名称、价格、作者和出版时间,同样实现了它们的 setXxx() 和 getXxx() 方法创建 CategoryDao 类,在该类中定义一个泛型的 Map 映射,其键为 Category 类型的对象,值为 List 类型的对象,并定义printCategoryInfo() 方法,用于打印类别和图书明细信息。

(4) 创建测试类 Test01,在该类中定义 4 个 类型 对象和 8 个 图书 对象,并将 8 个 图书 对象分成 4 组,存储到 4 个 List 集合中,然后将 4 个 类别 对象和 4 个 List 集合按照——对应的关系存储到 类别 类中的 类别map 映射中,调用方法输出。

此处先提供我在遇到此题时的第一种做法:

//Category类
public class Category {
	private int id;
	public Category(int id) {
		// TODO Auto-generated constructor stub
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name2) {
		this.name = name2;
	}
	private String name;
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		
		return name;
	}
}
//BookInfo用以存放图书明细
import java.util.ArrayList;
import java.util.List;

public class BookInfo  {
	private int id;
	private String name;
	private int price;
	private String author;
	private int startTime;
//此处将四个List声明在BookList中,在BookList中写了4个list的具体实现方法
	List<BookInfo> Javalist=new ArrayList<>();
	List<BookInfo> Pythonlist=new ArrayList<>();
	List<BookInfo> Htmllist=new ArrayList<>();
	List<BookInfo> Clist=new ArrayList<>();
	
public  BookInfo(int id,String name,int price,String author,int startTime) {
	// TODO Auto-generated constructor stub
	this.id=id ;
	this.name = name;
	this.price = price;
	this.author = author;
	this.startTime = startTime;
	}

public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getPrice() {
	return price;
}
public void setPrice(int price) {
	this.price = price;
}
public String getAuthor() {
	return author;
}
public void setAuthor(String author) {
	this.author = author;
}
public int getStartTime() {
	return startTime;
}
public void setStartTime(int startTime) {
	this.startTime = startTime;
}
public void addJavaBook(int id,String name,int price,String author,int startTime){

	Javalist.add(new BookInfo( id, name, price, author, startTime));	
	
}
public  void addHtmlBook(int id,String name,int price,String author,int startTime){
	
	Htmllist.add(new BookInfo( id, name, price, author, startTime));	
	
}
public void addPythonBook(int id,String name,int price,String author,int startTime){
	
	Pythonlist.add(new BookInfo( id, name, price, author, startTime));	
}
public void addCBook(int id,String name,int price,String author,int startTime){
	
	Clist.add(new BookInfo( id, name, price, author, startTime));	
}
//重写了tostring方法,不然的话返回的值是一个地址
@Override
public String toString() {
	// TODO Auto-generated method stub
	return "书号:"+id+" ,书名:《 "+name+" 》,价格:"+price+"元 ,作者:"+author+" ,出版时间:"+startTime;
}
}
//继承了BookInfo类
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class CategoryDao extends BookInfo {
	public CategoryDao(int id,String name,int price,String author,int startTime) {
		super(id, name, price, author, startTime);
		// TODO Auto-generated constructor stub
	}
	Map<Category, List<BookInfo>> map=new HashMap<>();
	//Map<Integer, String> map1=new HashMap<>();
	public List<BookInfo> putJavaBookinfo(int id,String name,int price,String author,int startTime){
		super.addJavaBook(id, name, price, author, startTime);	
		return Javalist;
	}
	public List<BookInfo> putPythonBookinfo(int id,String name,int price,String author,int startTime){
		super.addPythonBook(id, name, price, author, startTime);	
		return Pythonlist;
	}
	public List<BookInfo> putHtmlBookinfo(int id,String name,int price,String author,int startTime){
		super.addHtmlBook(id, name, price, author, startTime);	
		return Htmllist;
	}
	public  List<BookInfo> putCBookinfo(int id,String name,int price,String author,int startTime){
		super.addCBook(id, name, price, author, startTime);	
		return Clist;
	}
	public  void addCategory(int id,String name){
		Category c1=new Category(id);
		c1.setName(name);
		c1.setId(id);
		if(id==1){
			//为书号判断类型区间
			map.put(c1, Javalist);
		}else if(id==2){	
			map.put(c1, Htmllist);
		}else if(id==3){			
			map.put(c1,Pythonlist);
		}else if(id==4){		
			map.put(c1,Clist);
		}
	}
	//此处实现了打印Map集合的方法
	public void printCategoryInfo(){
		Iterator<Category> it=map.keySet().iterator();
		while(it.hasNext()){
			Category a=it.next();
			System.out.println(a+":");
			System.out.println(map.get(a));			
		}		
		}	}		
//测试类  测试类中定义了4个类型,8种对象且每个类型对应的有2套书籍,最后调用输出方法
public class Test01 {
	public static void main(String[] args) {
		CategoryDao d1=new CategoryDao(0, null, 0, null, 0);
		d1.addJavaBook(1, "java编程思想", 43, "张三", 20080801);
		d1.addJavaBook(1, "java从删库到跑路", 28, "李四", 20080802);
		d1.putHtmlBookinfo(2, "Html开发规范", 23, "王五", 20080803);
		d1.putHtmlBookinfo(2, "Html之禅", 28, "赵六", 20080804);
		d1.putPythonBookinfo(3, "Python与大数据", 50, "王五", 20080805);
		d1.putPythonBookinfo(3, "Python基础", 45, "赵六", 20080806);
		d1.putCBookinfo(4, "C++从入门到烧书", 61, "孙七", 20080807);
		d1.putCBookinfo(4, "C++弃坑之路", 49, "周八", 20080808);	
		d1.addCategory(1,"Java类 ");
		d1.addCategory(2, "Html类");
		d1.addCategory(3, "Python类");
		d1.addCategory(4, "C语言类");
		d1.printCategoryInfo();

	}
}

运行截图

在这里插入图片描述

经过指导后做出了代码方便易写的,且冗余小的代码:

//Category测试类
public class Category {
	
		private  int id;
		private String name;
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		
}
//BookInfo类
public class BookInfo {
	public  BookInfo(int id,String name,double price,String author,String starTime){
		this.id=id;
		this.name=name;
		this.price=price;
		this.author=author;
		this.starTime=starTime;
	}
	private int id;
	private String name;
	private double price;
	private String author;
	private String starTime;
	@Override
	public String toString() {
		
		return "书号:"+id+" ,书名:《 "+name+" 》,价格:"+price+"元 ,作者:"+author+" ,出版时间:"+starTime;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getStarTime() {
		return starTime;
	}
	public void setStarTime(String starTime) {
		this.starTime = starTime;
	}
}
//CategoryDao类,只定义Map函数,实现添加循环遍历输出添加完成后的Map集合
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class CategoryDao {
	public Map<Category,ArrayList<BookInfo>>  map =  new HashMap<>();
	public void printCategoryInfo(){
		  Iterator<Category> it = map.keySet().iterator();
		  while(it.hasNext()){
			  Category key  =it.next();
			  System.out.print("类型编号:"+key.getId()+",类型名:"+key.getName());
//			  System.out.println(map.get(key));
			  System.out.println();
			  
			  System.out.println(map.get(key));
//			  for(BookInfo book:map.get(key)){
//				  System.out.print(book);
//			  }System.out.println();
		  }
	}
}
//测试类,添加对象,并定义了4个BookList类型的List用以存放BookInfo添加进去的属性
import java.util.ArrayList;
import java.util.List;
public class Test01 {
	public static void main(String[] args) {
		ArrayList<BookInfo>  Javalist = new ArrayList<BookInfo>();
		 Javalist.add(new BookInfo(1, "java编程思想", 43, "张三", "20080801"));
		 Javalist.add(new BookInfo(2, "java从删库到跑路", 28, "李四", "20080802"));
		 
		 ArrayList<BookInfo>  Htmllist = new ArrayList<BookInfo>();
		 Htmllist.add(new BookInfo(3, "Html开发规范", 23, "王五", "20080803"));
		 Htmllist.add(new BookInfo(4, "Html之禅", 28, "赵六", "20080804"));
		 
		 ArrayList<BookInfo>  Pythonlist = new ArrayList<BookInfo>();
		 Pythonlist.add(new BookInfo(5, "Python基础", 45, "赵六", "20080806"));
			
		 Pythonlist.add(new BookInfo(6, "Python与大数据", 50, "王五", "20080805"));
		 
		 
		 ArrayList<BookInfo>  Clist = new ArrayList<BookInfo>();
		 Clist.add(new BookInfo(4, "C++从入门到烧书", 61, "孙七", "20080807"));
		 Clist.add(new BookInfo(4, "C++弃坑之路", 49, "周八", "20080808"));
		 CategoryDao cdao=  new CategoryDao();
		 Category  java = new Category();
		 java.setId(1);
		 java.setName("Java类书籍");
		 Category  py = new Category();
		 py.setId(2);
		 py.setName("Python类书籍");
		 Category  html = new Category();
		 html.setId(3);
		 html.setName("Html类书籍");
		 cdao.map.put(html, Htmllist);
		 Category  c = new Category();
		 c.setId(4);
		 c.setName("C语言类书籍");
		 cdao.map.put(java, Javalist);
		 cdao.map.put(py, Pythonlist);
		 cdao.map.put(c, Clist);
		 cdao.printCategoryInfo();
	}
}

运行截图

在这里插入图片描述
这些就是对本题的一些解答与思考,在处理此题时,遍历Map集合的值时,其实也就是遍历一个类型是BookInfo类型的List时,想将这个list隔行遍历,其实也就是在Category中实现的时候讲Map集合中的Values对应隔行输出即可。但是我在改的时候,始终不对。

喜欢我的…思路和代码的大佬给我点个赞,如果你有更好的思路,请关注我,希望得到你的指点~

如果你是大神,求带哦…

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值