HashSet实例-增删查&遍历
主要内容:HashSet的简单使用,HashSet的遍历的两种方式,以及可能出现的问题
-
问题描述
HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时就是使用这个实现类。HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。本次挑战将模拟一个图书管理系统,对图书对象进行增加、删除、查询。
-
解题思路
-
定义图书类 Book,具有属性账号 id,书名 name、作者 author 和价格 price,在创建图书对象时要求通过构造器进行创建,一次性将四个属性全部赋值,要求账户属性是 int 型,名称是 String 型,作者是 String 型,价格是 double,请合理进行封装。
-
在 Book 类添加 toString 方法,要求返回图书信息字符串,使用制表符隔开各信息。
-
要求定义一个图书馆 Library 类,在图书馆类中添加一个 HashSet 集合用于保存多本图书。
-
在图书馆类中要求具有以下方法:
addBook()
、deleteBook()
、selectBook()
。分别能够对图书进行增加、删除、查询。 -
addBook()
方法的输入规则参照「测试验证」中的截图。 -
deleteBook()
删除方法通过输入一个图书 id 进行删除指定图书,删除完成后输出“删除成功!”字样。 -
selectBook()
通过输出所有图书对象的toString()
方法输出图书信息。
通过Iterator或者forEach(for(object e:HashSet))遍历
HashSet its=new HashSet;
Iterator it=its.iterator();
while(its.hasNext()){
System.out.println(“it.next()”);
}
for(Student s:students){
System.out.println(s.toSting());
}
-
-
我的代码
package org.lanqiao.entity; public class Book { private int id; private String name; private String author; private double price; public Book(int id, String name, String author, double price) { this.id = id; this.name = name; this.author = author; this.price = price; } 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 String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String toString(){ return "Book{ id="+id+",name="+ name+",author="+author+",price="+price+"}"; } }
package org.lanqiao.main; import java.util.HashSet; import java.util.Scanner; import java.util.*; import org.lanqiao.entity.Book; public class Library { static HashSet<Book> books=new HashSet(); static Scanner input=new Scanner(System.in); public static Boolean addBook(){ System.out.println("请输入图书id:"); int id=input.nextInt(); System.out.println("请输入书名:"); String name=input.next(); System.out.println("请输入作者名:"); String author=input.next(); System.out.println("请输入价格:"); double price=input.nextDouble(); Book newBook=new Book(id,name,author,price); Boolean addFlag=books.add(newBook); if(addFlag){ System.out.println("添加成功"); return true; }else{ return false; } } public static Boolean deleteBook(int id){ Boolean removeFlag=false; for(Book bs:books){ if(bs.getId()==id){ removeFlag=books.remove(bs); } } if(removeFlag){ System.out.println("删除成功"); return true; }else{ return false; } } public static Boolean deleteOneBook(){ System.out.println("请输入要删除的图书的id:"); int id=input.nextInt(); return deleteBook(id); } public static void selectBook(){ Iterator<Book> books2=books.iterator(); while(books2.hasNext()){ System.out.println(books2.next().toString()); } } public static void show(){ System.out.println("------欢迎来到蓝桥图书馆------"); System.out.println("1.添加图书"); System.out.println("2.查询图书"); System.out.println("3.删除图书"); System.out.println("4.退出程序"); int num=4; do{ System.out.println("请输入选项"); num=input.nextInt(); switch(num){ case 1:addBook();break; case 2:selectBook();break; case 3:deleteOneBook();break; case 4:System.out.println("退出成功");break; } }while(num!=4); } public static void main(String[] args) { show(); } }
-
实验结果
在使用Iterator的时候系统会默认导入一个包,但事实上需要修改为java.util…的包,直接import java.util.*
;就OK了。