目录
2.ArrayList,Vector,LinkedList区别
4.HashSet,LinkedHashSet,TreeSet的区别
一、HashSet实现选课系统
必须重写hasCode方法和equals方法
package Task;
/**
* 课程类
* @author 惊蛰
*
*/
public class Course {
private Integer id;//课程编号
private String name;//课程名称
private Integer credit;//学分
private Integer hours;//学时
private String teacher;//教师
public Course() {
super();
}
public Course(Integer id, String name, Integer credit, Integer hours, String teacher) {
super();
this.id = id;
this.name = name;
this.credit = credit;
this.hours = hours;
this.teacher = teacher;
}
@Override
public int hashCode() {
return id +name.hashCode();
}
@Override
public boolean equals(Object obj) {
//属于同一个对象
if(this == obj) {
return true;
}
if(obj == null) {
return false;
}
if(this.getClass() != obj.getClass()) {
return false;
}
//如果是同一类型
Course c = (Course) obj;
//逐个比较属性值
if(this.id == c.id && this.name ==c.name) {
return true;
}else {
return false;
}
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getCredit() {
return credit;
}
public void setCredit(Integer credit) {
this.credit = credit;
}
public Integer getHours() {
return hours;
}
public void setHours(Integer hours) {
this.hours = hours;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
@Override
public String toString() {
return "Course [id=" + id + ", name=" + name + ", credit=" + credit + ", hours=" + hours + ", teacher="
+ teacher + "]";
}
}
package Task;
/**
* 选课系统
* 1.提供可以选择的课程类别List存储
* 2.选课
* 1)根据课程编号查找课程
* 2)把找到的课程添加到HashSet
* @author 惊蛰
*
*/
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
public class TaskHashSet {
static ArrayList<Course> list = new ArrayList<Course>();
static HashSet<Course> set = new HashSet<Course>();
static Scanner sc = new Scanner(System.in);
//静态块,最先执行
static {
list.add(new Course(1,"java程序设计",4,64,"王老师"));
list.add(new Course(2,"MySQL数据库",3,56,"张老师"));
list.add(new Course(3,"HTML",2,32,"刘老师"));
list.add(new Course(4,"javaWeb",4,64,"马老师"));
list.add(new Course(5,"Spring",4,64,"李老师"));
list.add(new Course(6,"SpringBoot",4,64,"工老师"));
list.add(new Course(7,"SpringCloud",4,64,"胡老师"));
list.add(new Course(8,"微信小程序",3,32,"马老师"));
}
public static void main(String[] args) {
while(true) {
//打印所有可选课程
printAll();
//选课
selectCourse();
}
}
private static void printAll() {
System.out.println("----------可选课程有----------");
//forEach遍历
for(Course course : list) {
System.out.println(course);
}
}
private static void selectCourse() {
System.out.println("请输入课程编号");
int id = sc.nextInt();
//根据编号查找课程
Course course = findById(id);
if(course == null) {
System.out.println("未找到该编号的课程");
return;
}
//打印已选课程
System.out.println("您选择的课程为"+course);
System.out.println("是否已被选"+set.contains(course));
set.add(course);
System.out.println("----------已选的课程有----------");
//forEach遍历
for(Course c : set) {
System.out.println(c);
}
}
/**
* 根据课程编号查找课程
* @param id 课程编号
* @return
*/
private static Course findById(int id) {
int index = -1;
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getId() == id) {
index = i;
break;
}
}
if(index != -1) {
return list.get(index);
}else {
return null;
}
}
}
二、ArrayList实现商品管理
package Task;
/**
* 商品类
* @author 惊蛰
*
*/
public class products {
private int id;//编号
private int stock;//库存
private String name;//名称
private String category;//种类
private String description;//描述
private double price;//价格
private int state;//状态
public products() {
super();
}
/**
* 有参的构造方法,用于初始化
* @param id
* @param stock
* @param name
* @param category
* @param description
* @param price
* @param state
*/
public products(int id, int stock, String name, String category, String description, double price, int state) {
super();
this.id = id;
this.stock = stock;
this.name = name;
this.category = category;
this.description = description;
this.price = price;
this.state = state;
}
/**
* 获取编号
* @return
*/
public int getId() {
return id;
}
/**
* 设置编号
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取库存
* @return
*/
public int getStock() {
return stock;
}
/**
* 设置库存
* @param stock
*/
public void setStock(int stock) {
this.stock = stock;
}
/**
* 获取商品名
* @return
*/
public String getName() {
return name;
}
/**
* 设置商品名
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取商品种类
* @return
*/
public String getCategory() {
return category;
}
/**
* 设置商品种类
* @param category
*/
public void setCategory(String category) {
this.category = category;
}
/**
* 获取商品描述
* @return
*/
public String getDescription() {
return description;
}
/**
* 设置商品描述
* @param description
*/
public void setDescription(String description) {
this.description = description;
}
/**
* 获取商品价格
* @return
*/
public double getPrice() {
return price;
}
/**
* 设置商品价格
* @param price
*/
public void setPrice(double price) {
this.price = price;
}
/**
* 获取商品状态
* @return
*/
public int getState() {
return state;
}
/**
* 设置商品状态
* @param state
*/
public void setState(int state) {
this.state = state;
}
/**
* 打印全部商品信息
*/
@Override
public String toString() {
return "products [id=" + id + ", stock=" + stock + ", name=" + name + ", category=" + category
+ ", description=" + description + ", price=" + price + ", state=" + state + "]";
}
}
package Task;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 商品管理类
* 分析:
* 1.主要业务:save(),delete(),update,query(),printAll()
* 2.辅助业务:crateNo(),findIndex(),printProducts(),检测输入格式
* @author 惊蛰
*
*/
public class ProductsManage {
public static ArrayList<products> plist = new ArrayList<products>();
//public static int maxIndex=0;
public static Scanner reader=new Scanner(System.in);
public static void main(String[] args) {
System.out.println("1.增加 2.删除 3.修改 4.查询 5.打印全部商品 6.退出");
System.out.println("请选择");
int select = getSelect();
while(true) {
switch(select) {
case 1: save();break;
case 2: delete();break;
case 3: update();break;
case 4: query();break;
case 5: printAll();break;
case 6: System.exit(0);
default: System.out.println("请输入正确操作");
}
System.out.println("1.增加 2.删除 3.修改 4.查询 5.打印全部商品 6.退出");
System.out.println("请选择");
select=reader.nextInt();
}
}
private static int getSelect() {
String regex = "^[1-6]{1}";
String s1 = "";
while(true) {
s1 = reader.next();
if(!s1.matches(regex)) {
System.out.println("你输入数据有误,请重新输入");
continue;
}else {
return Integer.parseInt(s1);
}
}
}
/**
* 打印全部正常的商品
*/
private static void printAll() {
System.out.println("全部的商品信息为:");
for(int i=0;i<plist.size();i++) {
if(plist.get(i).getState() ==1) {
System.out.println(plist.get(i));
}
}
}
/**
* 查询
*/
private static void query() {
System.out.println("请选择查找方式");
System.out.println("1.按商品名查询 2.按商品类型查询");
int select=reader.nextInt();
int flag=0;
if(select==1) {
//按商品名查询
System.out.println("请输入名称关键字");
String s1=reader.next();
for(int i=0;i < plist.size();i++) {
if(plist.get(i).getName().indexOf(s1)!=-1&&plist.get(i).getState()==1){
flag=1;
System.out.println(plist.get(i));
}
}
}
else if(select==2) {
//按商品类型查询
System.out.println("请输入类别关键字");
String s1=reader.next();
for(int i=0;i<plist.size();i++) {
if(plist.get(i).getCategory().indexOf(s1)!=-1&&plist.get(i).getState()==1){
flag=1;
System.out.println(plist.get(i));
}
}
}
else {
System.out.println("请选择正确的查找方式");
}
if(flag==0) {
System.out.println("未找到");
}
}
/**
* 修改
*/
private static void update() {
System.out.println("请输入要修改商品的编号");
int id=reader.nextInt();
int flag=0;
for(int i=0;i<plist.size();i++) {
if(plist.get(i).getId()==id&&plist.get(i).getState()==1) {
flag=1;
System.out.println("请重新输入商品信息");
System.out.println("名称");
String name=reader.next();
System.out.println("类别");
String category=reader.next();
System.out.println("价格");
double price=reader.nextDouble();
System.out.println("库存");
int stock=reader.nextInt();
System.out.println("描述");
String description=reader.next();
//重新赋值
plist.get(i).setName(name);
plist.get(i).setCategory(category);
plist.get(i).setPrice(price);
plist.get(i).setStock(stock);
plist.get(i).setDescription(description);
System.out.println("修改完成");
printProducts(i);
break;
}
}
if(flag==0) {
System.out.println("您输入了无效的商品编号");
}
}
/**
* 删除
*/
private static void delete() {
System.out.println("请输入要删除对象的编号");
int id=reader.nextInt();
int flag=0;
for(int i=0;i<plist.size();i++) {
if(plist.get(i).getId()==id&&plist.get(i).getState()==1) {
flag=1;
System.out.println(plist.get(i));
System.out.println("您是否要删除(1是,0否)");
int select=reader.nextInt();
if(select==1) {
plist.get(i).setState(0);
System.out.println("删除完成");
break;
}
else if(select==2){
System.out.println("取消删除");
break;
}
else {
System.out.println("请输入正确的操作");
break;
}
}
}
if(flag==0) {
System.out.println("您输入了无效的编号");
}
}
/**
* 增加
*/
private static void save() {
//生成编号
int id=crateNo();
System.out.println("名称");
String name=reader.next();
System.out.println("类别");
String category=reader.next();
System.out.println("价格");
double price = getPrice();
System.out.println("库存");
int stock = getStock();
System.out.println("描述");
String description=reader.next();
//组合对象
products p=new products(id,stock,name,category,description,price,1);
//存入数组
plist.add(p);
}
private static double getPrice() {
String regex = "^((([^0][0-9]+|0)\\.([0-9]{1,2}))$)|^(([1-9]+)\\.([0-9]{1,2})$)";
String s1 = "";
while(true) {
s1 = reader.next();
if(!s1.matches(regex)) {
System.out.println("您输入的格式有误,请重新输入");
continue;
}else {
return Double.parseDouble(s1);
}
}
}
private static int getStock() {
String regex = "^([1-9]|[1-9][0-9]+)";
String s1 = "";
while(true) {
s1 = reader.next();
if(!s1.matches(regex)) {
System.out.println("您输入的格式有误,请重新输入");
continue;
}else {
return Integer.parseInt(s1);
}
}
}
/**
* 自动生成编号
*/
public static int crateNo() {
if(plist.isEmpty()) {
return 1;
}
else {
//上一个商品的编号-1
int index = plist.size()-1;
return plist.get(index).getId()+1;
}
}
/**
* 根据商品编号查找
* @param id 商品编号
* @return 商品在数组中的引用,如果找到,返回数组编号,找不到返回-1
*/
public static int findIndex(int id) {
int index=-1;
for(int i=0;i<plist.size();i++) {
if(id==plist.get(i).getId()) {
index=i;
break;
}
}
return index;
}
/**
* 打印指定索引的商品
* @param index 指定的索引
*/
public static void printProducts(int index) {
System.out.println(plist.get(index));
}
}
三、HashMap实现身份证查询服务
package Task;
import java.util.HashMap;
public class IDUtil {
public static HashMap<String, String> map = new HashMap<String, String>();
/**
* 初始化身份证号归属地关系
*/
static {
map.put("370100", "山东省济南市");
map.put("370102", "山东省济南市历下区");
map.put("370103", "山东省济南市市中区");
map.put("370104", "山东省济南市槐荫区");
map.put("370105", "山东省济南市天桥区");
map.put("370112", "山东省济南市历城区");
map.put("370113", "山东省济南市长清区");
map.put("370114", "山东省济南市章丘区");
map.put("370115", "山东省济南市济阳区");
}
/**
* 根据身份证号前六位查找归属地
* @param code 身份证号前六位
* @return
*/
public static String getAddress(String code) {
//根据键值查找归属地
return map.get(code);
}
}
package Task;
import java.util.Scanner;
/**
* 身份证查询服务
* @author 惊蛰
*
*/
public class TaskHashMap {
public static void main(String[] args) {
//输入身份证号
String id = getId();
//查询
queryId(id);
}
private static String getId() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入身份证号");
String id = "";
String regex = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9xX]";
while(true) {
id = sc.next();
if(id.matches(regex)) {
return id;
}else {
System.out.println("输入格式有误,请重新输入");
}
}
}
private static void queryId(String id) {
//截取前6位
String addrCode = id.substring(0,6);
String address = IDUtil.getAddress(addrCode);
//截取出生日期(7-14位
String dateCode = id.substring(6, 14);
String birthDate = dateCode.substring(0,4)+"年"+dateCode.substring(4,6)+"月"+dateCode.substring(6,8);
//截取第17位
String sexCode = id.substring(16,17);
int int_sexCode = Integer.parseInt(sexCode);
String sex = "";
if(int_sexCode %2 ==0) {
sex = "女";
}else {
sex = "男";
}
System.out.println("地区:"+address);
System.out.println("出生日期:"+birthDate);
System.out.println("性别:"+sex);
}
}
四、概念理解
1.Collection 和 Map 的接口的派生关系
Collection:对象,Map:键值对
List:有序,可重复
Set:无序,不可重复
LinkedXXX:链表结构
TressXXX:树形结构,自然顺序排序