Java容器类中包含有List,List也分为ArrayList、LinkList、Vector和Stack。
这几个链表都有相同的特性。在方法上面的使用也是大同小异。
ArrayList是属于线性表,元素时挨着放置的。
LinkList是非线性表,和数据结构一样,是散列排放在内存中。透过指向下一个元素来连接起来的。
Vector是一个向量,类似于队列,先进先出。
Stack是栈,先进后出。
下面先按照ArrayList举例说明:
/**
*
* @author Administrator
* 这里是管理雇员的类
*/
class EmpMange{
private ArrayList al = null;
public EmpMange()
{
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)al.get(i);
if(emp.getEmpNo().equals(empNo))
{
System.out.println("找到该员工:");
System.out.println("编号:" + emp.getEmpNo());
System.out.println("姓名:" + emp.getName());
System.out.println("工资:" + emp.getSal());
}
}
}
//显示所有员工信息
public void showAllInfo()
{
for(int i = 0; i < al.size(); i++)
{
Emp emp = (Emp)al.get(i);
System.out.println("编号:" + emp.getEmpNo());
System.out.println("姓名:" + emp.getName());
System.out.println("工资:" + emp.getSal());
System.out.println(" ");
}
}
//修改员工工资
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); //按照名字删
}
}
}
}
/**
*
* @author Administrator
* 这里是被管理的雇员类
*/
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;
}
}
接着是调用这个类EmpManage:
EmpMange em = new EmpMange();
//从控制台输入信息
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"))
{
System.out.println("请输入员工编号:");
String empNo = br.readLine();
System.out.println("请输入员工工资:");
float sal = Float.parseFloat(br.readLine());
em.updateSal(empNo, sal);
}
else if(operType.equals("4"))
{
System.out.println("请输入员工编号:");
String empNo = br.readLine();
em.delEmp(empNo);
}
else if(operType.equals("5"))
{
//退出系统
System.exit(0);
}
}
运行结果如下:
在控制台中输入相关信息就可以了。
//=============================分割线================================
对于上面的例子有几点要注意一下:
1、是对异常的处理,在做br.readline()的时候。可能出现异常,我们直接在main中throws Exception,抛出去让编译器自己处理。或者我们可以用try...catch...来处理。
2、这个是线性表的例子,对于LinkList、Vector、Stack都一样的属性,不同的是他们在处理方法上面可能会有所区别。
比如LinkList 会有addFirst、addLast...等等方法。这个需要在实际使用时根据需求来使用。
3、List中要找对应的元素,一般只能用遍历的方法。因为还不想其他有键值的容器可以直接查找。