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