使用集合(ArrayList,HashMap等做对比)实现员工管理系统案例
2015-06-11 11:27
543 查看
用案例说话,在案例中学习集合。当然这里并没有引入泛型。下一次用另外一个来引入泛型。希望小伙伴关注。这个案例中注释很清晰,相信大家可以看懂。
package com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; public class test { public static void main(String[] args) { //创建EmpMange对象 EmpManage em=new EmpManage(); //输入流 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //***一个建议的菜单 while(true){ System.out.println("请选择您进行的操作:"); System.out.println("1.添加一个雇员"); System.out.println("2.查找一个雇员"); System.out.println("3.修改一个雇员的工资"); System.out.println("4.删除一个雇员"); System.out.println("5.退出系统"); try { String operType=br.readLine(); //判断操作数类型 if(operType.equals("1")){//add emp System.out.println("请输入编号:"); String empNo=br.readLine(); System.out.println("请输入姓名:"); String name=br.readLine(); System.out.println("请输入该员工薪水:"); float sal=Float.parseFloat(br.readLine()); Emp emp=new Emp(empNo, name, sal); em.addEmp(emp); } else if(operType.equals("2")){//查找 System.out.println("请输入编号"); String empNo=br.readLine(); em.showInfo(empNo); } else if(operType.equals("3")){//修改雇员薪资 System.out.println("请输入要修改的员工的编号:"); String empNo=br.readLine(); System.out.println("请输入该员工的新工资:"); float empSal=Float.parseFloat(br.readLine()); em.updateSal(empNo, empSal); } else if(operType.equals("4")){//删除一个员工 System.out.println("请输入你要删除的员工的编号:"); String empNo=br.readLine(); em.delEmp(empNo); } else if(operType.equals("5")){ System.exit(0); } } catch (IOException ex) { Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex); } } } } //雇员管理类 class EmpManage{ private ArrayList al=null; public EmpManage(){ al=new ArrayList(); } //加入员工 public void addEmp(Emp emp){ al.add(emp); } //显示员工的相关信息 public void showInfo(String empNo){ //遍历整个ArrayList for(int i=0;i<al.size();i++){ //取出Emp对象 Emp emp=(Emp) al.get(i); //比较编号 if(emp.getEmpNo().equals(empNo)){ System.out.println("找到该员工,他的信息是:"); System.out.println("编号=:"+empNo); System.out.println("名字="+emp.getName()); System.out.println("薪水="+emp.getSal()); } } } //修改工资 public void updateSal(String empNo,float newSal){ for(int i=0;i<al.size();i++){ Emp emp=(Emp) al.get(i); if(emp.getEmpNo().equals(empNo)){ emp.setSal(newSal); } } } //删除某个员工 public void delEmp(String empNo){ for(int i=0;i<al.size();i++){ Emp emp=(Emp) al.get(i); if(emp.getEmpNo().equals(empNo)){ al.remove(i);//前者根据index来删除, //后者直接把对象放进去删除al.remove(emp); } } } } //雇员类 class Emp{ private String empNo;//员工号 private String name;//名字 private float sal;//薪水 public Emp(String empNo,String name,float sal){ this.empNo=empNo; this.name=name; this.sal=sal; } public String getEmpNo() { return empNo; } public void setEmpNo(String empNo) { this.empNo = empNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getSal() { return sal; } public void setSal(float sal) { this.sal = sal; } }第二个java文件用来测试hashMap
package com.test; import java.util.HashMap; import java.util.Iterator; public class HashMap_demo { public static void main(String[] args) { //创建一个HashMap对象 HashMap hm=new HashMap(); Emp emp1=new Emp("s001", "zhangsan", 1000f); Emp emp2=new Emp("s002", "lisi", 500f); Emp emp3=new Emp("s003", "wangmazi", 500f); //将两个员工员工对象放入到hm hm.put("s001", emp1); hm.put("s002", emp2); //下面这样子添加,会把原来s002的键覆盖掉,让它的值变为emp3 //其实这也就做到了 修改的目的。 ArrayList 允许重复,而hashmap则不允许 //因为映射是要做到唯一性的 hm.put("s002", emp3); //如果要查找的编号是s002 if(hm.containsKey("s002")){ System.out.println("有该员工"); //如何取出,不用像ArrayList那样去遍历 //通过键来获取他的对象值 //通过hashmap来做刚刚那个员工管理系统是更方便的。 Emp emp=(Emp) hm.get("s002"); System.out.println("名字:"+emp.getName()); } else{ System.out.println("can not find"); } //如何遍历haspMap中所有的Key和Value //使用迭代器,这个迭代器遍历是没有特定顺序的遍历 //The elements are returned in no particular order // (unless this set is an instance of some class that provides a guarantee Iterator it=hm.keySet().iterator(); //hasNext看看还有没有更多的元素 while(it.hasNext()){ //取出key,迭代器对象的next()方法返回的是,迭代器里面的下一个元素,我么 //我们现在迭代器里面是key的set集合,所以取出的自然是key,而我们的key是string类型的, //当然要用string来接受 String key=(String) it.next(); //通过key取出value Emp emp=(Emp) hm.get(key); System.out.println("名字:"+emp.getName()); System.out.println("薪水:"+emp.getSal()); } } }
输出结果:
有该员工 名字:wangmazi 名字:wangmazi 薪水:500.0 名字:zhangsan 薪水:1000.0第三个java文件用来演示Hashtable的
package com.test;import java.util.HashMap;import java.util.Hashtable;import java.util.Map;public class Hashtable_demo { public static void main(String[] args) { Hashtable ht=new Hashtable(); //put()和 get()非常相似,这里不演示了 //这里进行区别演示,Hashtable中不允许出现null// ht.put(null, null);// System.out.println("Hashtable测试:"+ht.get(null)); //如果我是用HashMap Map hm2=new HashMap();//这里体现了多态,而且很方便 //也可以HashMap hm2=new HashMap(); hm2.put(null, null); System.out.println("HashMap测试:"+hm2.get(null)); }}输出结果:HashMap测试:null如果是将Hashtable的注释去掉,因为不允许空值,所以,会报错,但是编译是通过的。会报一个异常,输入如下:Exception in thread "main" java.lang.NullPointerExceptionat java.util.Hashtable.put(Hashtable.java:459)at com.test.Hashtable_demo.main(Hashtable_demo.java:12)Java Result: 1
相关文章推荐
- js如何判断是否在iframe中及防止网页被别站用 iframe嵌套 (Load denied by X-Frame-Options)
- 天堂Lineage(單機版)從零開始架設教學 Installing Lineage 3.52 Server - On Windows
- 对各团队评价
- struts2配置详解
- C实现 LeetCode->Integer to Roman
- hihocoder #1035 : 自驾旅行 III 树形DP
- JAVA 中两种判断输入的是否是数字的方法
- Day12:看节目对于高考的想法
- 利用SQL注入漏洞登录后台
- LeetCode 之 Implement strStr() — C 实现
- 更换Prezi的logo
- 使用AudioTrack进行音频播放
- jQuery Visualize
- dx:trouble processing: bad class file magic (cafebabe) or version (0033.0000)
- Oracle默认密码
- Python标准库13 循环器 (itertools)
- form表单
- Hadoop分布式缓存
- HLJU 1221: 高考签到题 (三分求极值)
- Google C++编程风格