一、引言
1.概述
可以自动扩容(可长可短,自由伸缩)的容器
2.数组和集合的区别
数组:
①长度固定
②可以存基本数据类型和引用数据类型
集合:
①长度可变(多了自动加,少了自动减)
②可以存引用数据类型,但不能存基本数据类型(如果要存,需要将其变成对应的包装类)
3.包装类(除了char和int其他全部首字母大写)
集合如果要存基本数据类型,需要将其变成对应的包装类,规则如下:
![](https://i-blog.csdnimg.cn/blog_migrate/b61eb5893977a346b730a8a5a9908d9f.png)
4.泛型<E>
①定义:限定集合中存储数据的类型
②书写方式:
在JDK7之前,左右两边都要写<数据类型>
ArrayList<String> list = new ArrayList<String>();
JDK7:左边要写,右边可以不写,但是必须要加<>
ArrayList<String> list = new ArrayList<>();
二、常用方法
1.打印
ArrayList是java已写好的一个类,这个类在底层做了一些特殊处理。
使得打印输出的不是地址值,而是集合中存储的数据内容,在展示的时候会拿[]将所有的数据进行包裹。
ArrayList<String> list = new ArrayList<>();
System.out.println(list);//[]
2.添加元素
boolean add(E e) 添加成功返回true(任何时候都能添加成功,即任何时候都返回true)
boolean result1=list.add("aaa");
System.out.println(result1);//true
由于总是返回true,所以我们一般不在意他的返回值,直接调用即可
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list);//[aaa, bbb, ccc]
3.删除元素
①boolean remove(E e) 删除成功返回true
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("aaa");
list.add("bbb");
boolean result1=list.remove("aaa");
System.out.println(result1);//true
System.out.println(list);//[aaa, bbb]
boolean result2=list.remove("ddd");
System.out.println(result2);//false
注:
如果有多个相同的数据,每次只能删除第一个
如果要删除的元素不存在,则视为删除失败,返回false
②E remove(int index) 删除对应下标元素,同时返回被删除的元素值
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
String str=list.remove(0);
System.out.println(str);//aaa
System.out.println(list);//[bbb]
4.修改元素
E set(int index,E e) 根据下标修改对应位置的元素,并返回修改前的元素值
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
String str=list.set(1,"ccc");
System.out.println(str);//bbb
System.out.println(list);//[aaa, ccc]
5.遍历
①E get(int index) 根据下标查找对应位置的元素值返回
②int size() 获取集合的长度
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
for (int i = 0; i < list.size(); i++) {
String str=list.get(i);
System.out.println(str);
}
三、特殊情况
1.存储int和char
jdk5以后,int和Integer,char和Character之间是可以互相转化的,可以直接输入数字/字符添加元素。
public static void main(String[] args) {
ArrayList<Integer> list1 =new ArrayList<>();
ArrayList<Character> list2 =new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
list2.add('a');
list2.add('b');
list2.add('c');
for (int i = 0; i < list1.size(); i++) {
System.out.print(list1.get(i)+" ");
}
//1 2 3
System.out.println();
for (int i = 0; i < list2.size(); i++) {
System.out.print(list2.get(i)+" ");
}
//a b c
}
2.存储对象
public class Demo {
public static void main(String[] args) {
//1.创建集合
ArrayList<Student> list = new ArrayList<>();
//2.创建对象
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
Student s = new Student();
System.out.println("请输入第" + (i + 1) + "位姓名");
String name = sc.next();
System.out.println("请输入第" + (i + 1) + "位年龄");
int age = sc.nextInt();
s.setName(name);
s.setAge(age);
list.add(s);
}
// Student s1=new Student("zhangsan",23);
// Student s2=new Student("lisi",24);
// Student s3=new Student("wangwu",25);
//3.添加元素
//list.add(s1);
//list.add(s2);
//list.add(s3);
//4.遍历
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
}
}
}
注:
由于集合长度可长可短,自动伸缩,刚创建时size=0,for的判断条件就不能写成i < list.size(),而需要自己手动限定。