一、什么是集合
- 集合是Java API所提供的一系列类,可以用于动态存放多个对象。--
集合只能存对象
- 集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型。(集合中不能放基本数据类型,但可以放基本数据类型的包装类)
- 集合类可以自动扩容。
- 集合类全部支持泛型,是一种数据安全的用法。
二、集合框架总体结构
java.util.Set接口及其子类,set提供的是一个无序的集合;
java.util.List接口及其子类,List提供的是一个有序的集合;
java.util.Map接口及其子类,Map提供了一个映射(对应)关系的集合数据结构;
三、ArrayList
ArrayList其实就是维护了一个数组,使用扩容机制使其长度可变,可以把它想象成是一个数组的工具类,能够快速的改变数组的元素和长度。
第一次创建集合并添加第一个元素的时候,在底层创建一个默认长度为10的数组。
四、主要方法
增:add(int index, element)
add(element) //在index后面增加
删:remove(int index)
查:get(int index)
改:set(int index,E element)
判断是否为空 :isempty()
案例:
(1)建一个List,在List 中增加三个工人,基本信息如下:
姓名 年龄 工资
zs 18 3000
ls 25 3500
ww 22 3200
(2) 在ls 之前插入一个工人,信息为:姓名:zl,年龄:24,工资3300
(3) 删除ww 的信息
(4) 利用for 循环遍历,打印List 中所有工人的信息
增:add(元素值)
List <Worker> list = new ArrayList();
public void listInfo(){
list.add(new Worker("zs",18,3000));
list.add(new Worker("ls",25,3500));
list.add(new Worker("ww",22,3200));
插:add(索引,元素值)
public void insertList(){
list.add(1,new Worker("zl",24,3300));
}
删:remove(索引)
public void deleteList(){
list.remove(3);
}
查:list.get(i)
public void showList(){
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
如果Worker类不重写toString方法
此查询就会输出地址,而不是元素值
改 :set(索引, 元素值)
public void setList(){
list.set(1,list.get(2));
}
源代码
Worker类
public class Worker{
private int age;
private String name;
private double salary;
public Worker() {
}
public Worker(String name, int age, double salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public void work(){
System.out.println(name + "work");
}
@Override
public String toString() {
return "Worker{" +
"name=" + name +
", age='" + age + '\'' +
", salary=" + salary +
'}';
}
}
WorkerListTest类
import java.util.ArrayList;
import java.util.List;
public class WorkerListTest {
List <Worker> list = new ArrayList();
public void listInfo(){
list.add(new Worker("zs",18,3000));
list.add(new Worker("ls",25,3500));
list.add(new Worker("ww",22,3200));
}
public void insertList(){
list.add(1,new Worker("zl",24,3300));
}
public void deleteList(){
list.remove(3);
}
public void setList(){
list.set(1,list.get(2));
}
public void showList(){
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public void workList(){
for (Worker woker: list
) {
woker.work();
}
}
public static void main(String[] args) {
WorkerListTest wlt = new WorkerListTest();
wlt.listInfo();
wlt.insertList();
wlt.deleteList();
wlt.setList();
wlt.showList();
wlt.workList();
}
}
运行结果
五、总结:
在用到ArryList时,最好和泛型一起使用,否则容易出现类型转化错误,对于初学者而言,数组下标越界的事情也常有发送,这需要使用者去仔细的理清楚逻辑关系