3.20~~~继续 下午租房~
java面向对象编程(3) —— 一维数组,排序查找,多维数组
数组大小必须事先指定
对象数组在定义后,赋值时需要再次为每个对象分配空间【即:new对象】
Dog dogs[]=new Dog[4]; for(int i=0;i<dogs.length;i++){
dogs[i] = new Dog();
}
内排:将需要处理的所有数据都加载到内部存储器中进行排序。交换,选择,插入排序
外排:数据量过大,无法加载到内存,需要借助外部存储进行排序。合并,直接合并排序
跳过17-20讲
集合,掌握几个重要的就好
LinkedList,ArrayList,HashMap,Hashtable,Vector,Stack
/* * 演示java集合的用法 */ package com.test; //先引入一个包 import java.util.*; public class jihe { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //定义ArrayList对象 ArrayList al=new ArrayList(); //显示大小 System.out.println("al大小是:"+al.size()); //向al中加入数据(类型是Object) //创建一个职员 Clerk clerk1=new Clerk("宋江",50,1000); Clerk clerk2=new Clerk("卢俊义",49,800); Clerk clerk3=new Clerk("吴用",45,900); //将clerk加入到al中 al.add(clerk1); al.add(clerk2); al.add(clerk3); //?可不可以加入同样的人 al.add(clerk1); //显示大小 System.out.println("al大小是:"+al.size()); //如何访问al中对象(数据) //访问第一个对象 //Clerk temp = (Clerk)al.get(0); //System.out.println("第一个人名是:"+temp.getName()); //遍历al所有对象 for(int i=0;i<al.size();i++) { Clerk temp = (Clerk)al.get(i); System.out.println("名字是:"+temp.getName()); } //如何从al中删除一个对象 al.remove(2); System.out.println("删除吴用"); //遍历al所有对象 for(int i=0;i<al.size();i++) { Clerk temp = (Clerk)al.get(i); System.out.println("名字是:"+temp.getName()); } } } class Clerk { private String name; private int age; private float sal; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public float getSal() { return sal; } public void setSal(float sal) { this.sal = sal; } public Clerk(String name,int age,float sal) { this.name=name; this.age=age; this.sal=sal; } }
package com.test; import java.util.*; import java.io.*; public class Demo3 { /** * @param args */ public static void main(String[] args)throws Exception{ // TODO Auto-generated method stub //创建 EmpManage 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:退出"); String operType=br.readLine(); if(operType.equals("1")) { 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")) { //em.updateSal(empNo, newSal); } else if(operType.equals("4")) { //em.delEmp(empNo); } else if(operType.equals("5")) { //退出系统 终止当前正在运行的java虚拟机 0正常,其它 不正常 System.exit(0); } } } } //雇员管理类 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); //比较编号 //字符串==是地址相等!!! equals比较内容相等 if(emp.getEmpNo().equals(empNo))//用equals { 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); //或者 也行 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; } }
// LinkedList ll=new LinkedList(); // Emp emp1=new Emp("sa01","aa",1.1f); // Emp emp2=new Emp("sa02","bb",2.2f); // //表示把emp1加在链表的最前面 // ll.addFirst(emp1); // ll.addFirst(emp2); // for(int i=0;i<ll.size();i++) // { // System.out.println(((Emp)ll.get(i)).getName()); // } // ll.addLast(emp2); //Vector的用法 // Vector vv=new Vector(); // Emp emp1=new Emp("1","aa",1.2f); // vv.add(emp1); // for(int i=0;i<vv.size();i++) // { // Emp emp = (Emp)vv.get(i); // } //Stack stack = new Stack(); //stack. //创建HashMap // HashMap hm = new HashMap();
// //Map hm =new HashMap(); // Emp emp1 = new Emp("s001","aaa",3.3f); // Emp emp2 = new Emp("s002","bbb",6.6f); // Emp emp3 = new Emp("s003","ccc",9.9f); // //将emp放入到hm // hm.put("s001",emp1); // hm.put("s002",emp2); // hm.put("s002",emp3);//覆盖 // //如果要查找编号是s002 // if(hm.containsKey("s002")) // { // System.out.println("有这个员工"); // //如何取出 键值 // Emp emp=(Emp)hm.get("s002"); // System.out.println(emp.getName()); // }else{ // System.out.println("没有这个员工"); // } // // //遍历HashMap中所有的key和value // //iterator 迭代器 // Iterator it=hm.keySet().iterator(); // //hasNext返回一个布尔值 // while(it.hasNext()) // { // //取出key // String key=it.next().toString(); // //通过key取出value // Emp emp=(Emp)hm.get(key); // System.out.println(emp.getEmpNo()+emp.getSal()); // } // //Hashtable ht=new Hashtable(); //ht
总结:
- 如果要求线程安全,使用Vector、Hashtable
- 如果不要求线程安全,使用ArrayList,LinkedList、HashMap
- 如果要求键值对,使用HashMap、Hashtable
- 如果数据量很大、又要线程安全考虑Vector