简述ArrayList的优缺点
首先ArrayList是集合类,能存放object的数据,我们知道在java中所有的数据都是object的子类。所以ArrayList能存放各种数据,主要以存放对象为主。自带的方法可以实现对数据的增删改查。
优点:使用方便,理解容易。对数据的大小是动态的,随着元素的增加容器自动扩大。
import java.util.ArrayList;
ArrayList al=new ArrayList();//这就创建了一个ArrayList的一个容器。
其中包含了add、set、get、remove方法。具体的请查看帮助文档。
缺点:每次取出数据的时候需要遍历。效率相对较低。
比如说我想在ArrayList中找到具体的一个元素并把它取出来经行操作,就需要遍历整个容器,取出的时候还要经行类型转换。
例如有一个Student的类,它里面包含了学生的id,姓名,性别等等。我把具体的对象声明好已经放入到ArrayList中了。这时候我想通过学生的id比如stu007去找到这个学生,并对他的信息经行修改,就需要这样去写:
for(int i=0;i<al.size();i++){
Student su=(Student)al.get(i);//类型转换,从object转换成学生类
if(su.getStudentid().equals("stu007")) //getStudentid是学生类的成员方法,String比较内容是用的是equals函数。
{...}
}
具体的案例:公司的雇员管理系统,新报道的成员需要添加进来,可以通过他的id查看他的消息,也可以查看全部雇员的消息。并且能对雇员的薪水经行修改。
代码如下:
/**
*作者:光羽住一
* 作用:雇员类
*
*/
public class Emp {
private String empNo;
private String empName;
private double empsal;
public Emp(String empNo,String empName,double empsal) {
this.empNo=empNo;
this.empName=empName;
this.empsal=empsal;
}
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public double getEmpsal() {
return empsal;
}
public void setEmpsal(double empsal) {
this.empsal = empsal;
}
}
import java.util.ArrayList;
/**
* 基于ArrayList的雇员管理类
*
*
*/
public class empManage {
private ArrayList al=null;
public empManage() {
al=new ArrayList();
}
//添加新进入的雇员
public void addEmp(Emp emp) {
al.add(emp);
System.out.println("添加成功!");
}
//根据输入的雇员编号打印雇员信息
public void showInfo(String empNo) {
for(int i=0;i<al.size();i++) {
Emp emp=(Emp)al.get(i);
if(emp.getEmpNo().equals(empNo)) {
System.out.println("名字:"+emp.getEmpName()+"薪水:"+emp.getEmpsal());
}
}
}
//打印全部雇员的所有信息
public void showAll() {
for(int i=0;i<al.size();i++) {
Emp emp=(Emp)al.get(i);
System.out.println("编号:"+emp.getEmpNo()+"姓名:"+emp.getEmpName()+"薪水:"+emp.getEmpsal());
}
}
//修改某个雇员的薪水
public void changeSal(String empNo,double newSal) {
for(int i=0;i<al.size();i++) {
Emp emp=(Emp)al.get(i);
if(emp.getEmpNo().equals(empNo)) {
emp.setEmpsal(newSal);
}
}
System.out.println("修改成功!");
}
//删除某个雇员
public void removeEmp(String empNo) {
for(int i=0;i<al.size();i++) {
Emp emp=(Emp)al.get(i);
if(emp.getEmpNo().equals(empNo)) {
al.remove(emp);
}
}
System.out.println("删除成功!");
}
}
/*
* 主界面类
*/
import java.io.*;
public class employeeCenter {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
empManage manage=new empManage();
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 type=buf.readLine();
int choice =Integer.parseInt(type);
switch(choice) {
case 1:
System.out.println("请输入雇员编号:");
String empNo=buf.readLine();
System.out.println("请输入雇员姓名:");
String empName=buf.readLine();
System.out.println("请输入雇员薪水:");
String empSal=buf.readLine();
double sal=Double.parseDouble(empSal);
Emp emp=new Emp(empNo,empName,sal);
manage.addEmp(emp);
break;
case 2:
System.out.println("请输入要查找的员工编号:");
String empNo2=buf.readLine();
manage.showInfo(empNo2);
break;
case 3:
manage.showAll();
break;
case 4:
System.out.println("请输入要修改薪水的员工编号:");
String empNo3=buf.readLine();
System.out.println("请输入修改后的薪水:");
String empSal3=buf.readLine();
double sal3=Double.parseDouble(empSal3);
manage.changeSal(empNo3, sal3);
break;
case 5:
System.out.println("谢谢使用,再见!");
System.exit(0);
break;
}
}
}
}
运行界面: