在运行的时候改变数组大小,以前常用
int count = 5; Employee em = new Employee[count;]
如果用泛型数组列表会更方便.
ArrayList是一个有类型参数的泛型类。
1.声明数组
ArrayList<Employee> staff = new ArrayList<Employee>();
//这也称为菱形语法,因为空尖括号<>像是菱形。
编译器会检查新值要做什么。如果赋值给一个变量,或传递给某个方法,或者从某个方法返回,编译器会检查这个变量、参数或者方法的泛型类型,然后将这个类型放在<>中,在这个例子中,new ArrayList<>()将赋值给一个类型为ArrayList的变量,所以泛型类型为Employee。
2.添加元素
staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15));
3.更新数组容量
staff.ensureCapacity(100);
这个方法调用将分配一个包含100个对象的内部数组。这样一来,前100次add调用不会带来开销很大的重新分配空间。
还可以把初始容量传递ArrayList构造器
ArrayList<Employee> staff = new ArrayList<Employee>(100);
4.查看数组个数
size方法能够返回数组列表中包含的实际元素个数
staff.size();
相当于staff.length
5.恒定数组大小
staff.trimToSize();
这个方法将存储块的大小调整为保存当前元素数量所需要的存储空间。
6.访问数组列表
要设置第i个元素,可以使用
staff.set(i,Jcak);
等价于a[i] = Jack;
要得到一个数组列表的元素,可以
Employee e = staff.get(i);
这等价于
Employee e = a[i];
7.删除数组
Employee e = staff.remove(n);
n代表位置n
完整代码
package test0;
import java.time.LocalDate;
import java.util.*;
public class ArrayListtest
{
public static void main(String[] args)
{
// fill the staff array list with three Employee objects
ArrayList<Employee> staff = new ArrayList<Employee>();
staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15));
staff.add(new Employee("Harry Hacker", 50000, 1989, 10, 1));
staff.add(new Employee("Tony Tester", 40000, 1990, 3, 15));
//替换
staff.set(0,new Employee("Soul",93333,1996,4,2));
//删除
staff.remove(2);
//在第一个位上增加
staff.add(1, new Employee("Jack",50400,2000,5,3));
for (Employee e : staff)
e.raiseSalary(5);
// print out information about all Employee objects
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="
+ e.getHireDay());
}
}
class Employee
{
private String name;
private double salary;
private LocalDate hireDay;
public Employee(String name, double salary, int year, int month, int day)
{
this.name = name;
this.salary = salary;
hireDay = LocalDate.of(year, month, day);
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public LocalDate getHireDay()
{
return hireDay;
}
public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}
}