数组的长度不可以发生改变,但是ArrayList集合的长度是可以随意变化的

概述及基本使用

对于ArrayList来说,有个尖括号<E>代表泛型
泛型:是装在集合当中的所有元素,统一什么类型,只能是引用类型,不能是基本类型

  1. public class Demo01ArrayList {
  2. public static void main(String[] args) {
  3. //创建一个ArrayList集合,集合名称list,里面装的String类型
  4. ArrayList<String> list = new ArrayList<>();
  5. System.out.println(list);//[]
  6. //向集合当中添加数据,需要用add方法
  7. list.add("赵丽颖");
  8. System.out.println(list);
  9. }
  10. }

对于ArrayList集合来说,直接打印得到的不是地址值而是内容,如果内容为空,则得到[]

ArrayList当中常用的方法

添加元素

public boolean add(E e); 向集合当中添加元素,参数的类型和泛型一致

  1. public class Demo01ArrayListMethod {
  2. public static void main(String[] args) {
  3. ArrayList<String> list = new ArrayList<>();
  4. System.out.println(list);
  5. //向集合中添加元素:add
  6. boolean success = list.add("赵丽颖");
  7. System.out.println(list);
  8. System.out.println("添加的动作是否成功:"+success);//true
  9. }
  10. }

对于ArrayList集合来说,add添加动作一定是成功的,索引返回值可用可不用
但是对于其他集合来说,add添加动作不一定是成功

获取元素

public E get(int index); 从集合当中获取元素,参数是索引编号,返回值是对应位置的元素

  1. public class Demo02ArrayListMethod {
  2. public static void main(String[] args) {
  3. ArrayList<String> list = new ArrayList<>();
  4. System.out.println(list);
  5. list.add("小明");
  6. list.add("小李");
  7. list.add("小聪");
  8. //从集合中获取元素:get 索引值从0开始
  9. String name = list.get(2);
  10. System.out.println("第2号索引位置:"+name);
  11. }
  12. }

删除元素

public E remove(int index); 从集合当中删除元素,参数是索引编号,返回值是被删除的元素

  1. public class Demo03ArrayListMethod {
  2. public static void main(String[] args) {
  3. ArrayList<String> list = new ArrayList<>();
  4. System.out.println(list);
  5. list.add("小明");
  6. list.add("小李");
  7. list.add("小聪");
  8. //从集合中删除元素:remove,索引值从0开始
  9. String whoRemove = list.remove(1);
  10. System.out.println("被删除的人是:"+whoRemove);//小李
  11. System.out.println(list);// [小明, 小聪]
  12. }
  13. }

获取元素个数

public int size(); 获取集合的尺寸长度,返回值是集合中包含的元素个数

  1. public class Demo04ArrayListMethod {
  2. public static void main(String[] args) {
  3. ArrayList<String> list = new ArrayList<>();
  4. System.out.println(list);
  5. list.add("小明");
  6. list.add("小李");
  7. list.add("小聪");
  8. //获取集合元素个数
  9. int size = list.size();
  10. System.out.println("集合长度是:"+ size);
  11. }
  12. }

遍历集合

快捷键:list.fori

  1. public class Demo02ArrayListMethod {
  2. public static void main(String[] args) {
  3. ArrayList<String> list = new ArrayList<>();
  4. list.add("小明");
  5. list.add("小李");
  6. list.add("小聪");
  7. //遍历集合
  8. for (int i = 0; i < list.size(); i++) { //快捷键list.fori
  9. System.out.println(list.get(i));
  10. }
  11. }
  12. }



ArrayList集合存储基本元素

如果ArrayList需存储基本类型,必须使用基本类型对应的包装类

基本类型 包装类(引用类型,包装类都位于java.lang包下)
byte Byte
short Short
int Integer
long Long
double Double
char Character
boolean Boolean

从JDK 1.5+开始,支持自动装箱、自动拆箱。

自动装箱:基本类型 —> 包装类型
自动拆箱:包装类型 —> 基本类型

  1. public class ArrayListEach {
  2. public static void main(String[] args) {
  3. ArrayList<Integer> list = new ArrayList<>();
  4. list.add(100);
  5. list.add(200);
  6. System.out.println(list); //[100, 200]
  7. int num = list.get(1);
  8. System.out.println("第一号元素是:"+ num); //200
  9. }
  10. }

📖 练习

1、题目:生成6个1~33之间的随机整数,添加到集合,并遍历集合。

思路:
1. 需要存储6个数字,创建一个集合,
2. 产生随机数,需要用到Random
3. 用循环6次,来产生6个随机数字:for循环
4. 循环内调用r.nextInt(int n),参数是33,0~32,整体+1才是1~33
5. 把数字添加到集合中:add
6. 遍历集合:for、size、get

  1. public class Demo07 {
  2. public static void main(String[] args) {
  3. ArrayList<Integer> list = new ArrayList<>();
  4. Random r = new Random();
  5. for (int i = 0; i < 6; i++) {
  6. int num = r.nextInt(33) +1;
  7. list.add(num);
  8. }
  9. // 遍历集合
  10. for (int i = 0; i < list.size(); i++) {
  11. System.out.println(list.get(i));
  12. }
  13. }
  14. }

2、题目:自定义4个学生对象,添加到集合,并遍历。

思路:
1. 自定义Student学生类,四个部分。
2. 创建一个集合,用来存储学生对象。泛型:
3. 根据类,创建4个学生对象。
4. 将4个学生对象添加到集合中:add
5. 遍历集合:for、size、get

  1. public class Student {
  2. private String name;
  3. private int age;
  4. public Student() {
  5. }
  6. public Student(String name, int age) {
  7. this.name = name;
  8. this.age = age;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public int getAge() {
  17. return age;
  18. }
  19. public void setAge(int age) {
  20. this.age = age;
  21. }
  22. }
  1. public class Demo08 {
  2. public static void main(String[] args) {
  3. ArrayList<Student> list = new ArrayList<>();
  4. Student one = new Student("小蓝",20);
  5. Student two = new Student("小孩",20);
  6. Student three = new Student("小米",20);
  7. Student four = new Student("小莫",20);
  8. list.add(one);
  9. list.add(two);
  10. list.add(three);
  11. list.add(four);
  12. for (int i = 0; i < list.size(); i++) {
  13. Student stu = list.get(i);
  14. System.out.println("姓名:"+stu.getName() + " 年龄:"+stu.getAge());
  15. }
  16. }
  17. }

3、题目:定义以指定格式打印集合的方法(ArrayList类型作为参数),使用{}扩起集合,使用@分隔每个元素。
格式参照 {元素@元素@元素}。

  1. public class Demo09 {
  2. public static void main(String[] args) {
  3. ArrayList<String> list = new ArrayList<>();
  4. list.add("张三丰");
  5. list.add("宋远桥");
  6. list.add("张无忌");
  7. list.add("张翠山");
  8. System.out.println(list); // [张三丰, 宋远桥, 张无忌, 张翠山]
  9. printArrayList(list);//调用方法
  10. }
  11. /*
  12. 定义方法的三要素
  13. 返回值类型:只是进行打印而已,没有运算,没有结果;所以用void
  14. 方法名称:printArrayList
  15. 参数列表:ArrayList
  16. */
  17. private static void printArrayList(ArrayList<String> list) {
  18. System.out.print("{");
  19. for (int i = 0; i < list.size(); i++) {
  20. String s = list.get(i);
  21. if(i==list.size()-1){
  22. System.out.print(s +"}");
  23. }else {
  24. System.out.print(s + "@");
  25. }
  26. }
  27. }
  28. }