JAVA集合框架实践

目录

 一、HashSet实现选课系统

​ 二、ArrayList实现商品管理

 三、HashMap实现身份证查询服务

 四、概念理解

1.Collection 和 Map 的接口的派生关系

 2.ArrayList,Vector,LinkedList区别

 3.Stack的特征

 4.HashSet,LinkedHashSet,TreeSet的区别

 5.HashMap和Hashtable的区别


一、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:树形结构,自然顺序排序

 2.ArrayList,Vector,LinkedList区别

 3.Stack的特征

 4.HashSet,LinkedHashSet,TreeSet的区别

 5.HashMap和Hashtable的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值