ArrayList
1. ArrayList集合概述
- 传统数组的缺点就是一旦创建之后,不可以再改变
- 而ArrayList的长度是可以随意改变的
- 类
ArrayList <E>
、Scanner、Random都是在java.util这个包中,E表示泛型,即任意的类 - 但是注意:泛型只能是引用类型,而不能是基本类型,像关键字int、double这些表示的就是基本类型,而类String,StringBuffer这些就是引用类型
2. ArrayList的基本使用
- 基本使用方法要记住,有以下四个
public boolean add(E e) 向集合中添加一些数据
public E get(int index); 从集合中获取元素,参数是索引编号,返回值是对应位置的元素
public E remove(int index); 从集合中删除元素,参数是索引编号,返回值是被删除的元素
public int size(); 获取集合的尺寸长度,返回值是集合中包含的元素个数
- 我们就来用一下这四个基本方法
import java.util.ArrayList;
public class DemoArrayList {
public static void main(String[] args) {
//创建一个ArrayList集合,集合的名称是List,泛型是String
//备注:从JDK1.7开始,右侧的尖括号内部可以不写内容,但是<>本身还是要写的
ArrayList<String> list = new ArrayList<>();
System.out.println(list); //输出是一个[],如果list里面本身就有内容,那就输出[内容]
//ArrayList常用的一些方法:
//1. public boolean add(E e) 向集合中添加一些数据
//注意,ArrayList的添加方法是一定能成功的,所以返回值boolean一定是true,我们可以忽略这个 返回值,但其它集合不一定都可以成功
list.add("周杰伦");
list.add("贾斯汀比伯");
list.add("权志龙");
System.out.println(list); // [周杰伦, 贾斯汀比伯, 权志龙]
//2. public E get(int index); 从集合中获取元素,参数是索引编号,返回值是对应位置的元素
String name = list.get(0);
System.out.println("第0号的索引位置是:" + name); //第0号的索引位置是:周杰伦
//3. public E remove(int index); 从集合中删除元素,参数是索引编号,返回值是被删除的元素
String Who = list.remove(2);
System.out.println("被删除的人:" + Who);
//哈哈,还是把志龙加回去
list.add("权志龙");
//4. public int size(); 获取集合的尺寸长度,返回值是集合中包含的元素个数
int size = list.size();
System.out.println("现在一共有多少位巨星:" + size + "位");
}
}
/*输出结果:
[]
[周杰伦, 贾斯汀比伯, 权志龙]
第0号的索引位置是:周杰伦
被删除的人:权志龙
现在一共有多少位巨星:3位
*/
- 学完基本方法,我们就可以遍历一下ArrayList了
import java.util.ArrayList;
public class DemoArrayListEach {
public static void main(String[] args) {
//创建一个ArrayList集合,集合的名称是List,泛型是String
ArrayList<String> list = new ArrayList<>();
//添加人物
list.add("周杰伦");
list.add("贾斯汀比伯");
list.add("权志龙");
//遍历ArrayList
for(int i = 0; i < list.size(); i++) {
String name = list.get(i);
System.out.println(name);
}
}
}
/*输出结果
周杰伦
贾斯汀比伯
权志龙
*/
3. 当泛型是包装类型的时候
- 我们说下列这种写法是错误的,因为泛型不能是基本类型
ArrayList<int> list = new ArrayList<>();
- 不能写基本类型,但是我们可以写它的包装类型,例如int的包装类型是Integer
ArrayList<Integer> list = new ArrayList<>();
- 做一个表格,说明基本类型和包装类型的对照关系
基本类型 | 对应的包装类型 (基本是将左边第一个字母大写) |
---|---|
byte | Byte |
short | Short |
int | Integer [特殊] |
long | Long |
float | Float |
double | Double |
char | Character [特殊] |
boolean | Boolean |
-
自动装箱和自动拆箱
看下面这个例子:
//创建一个泛型为Integer的集合list ArrayList<Integer> list = new ArrayList<>(); //添加整形数字10 list.add(10); //得到第零号元素,就是数字10 int num = list.get(0);
为什么明明是 Integer 的包装类型数据却能用 int num来接收呢
原因是从JDK1.5开始…
int —> Integer 这个过程是编译器自动处理的,叫自动装箱
Integer —> int 这个过程也是编译器自动处理的,叫自动拆箱