簡述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;
}
}
}
}
運行界面: