ArrayList 和数组的差距
- ArrayList 集合的长度可以随意变化,但数组的长度设定之后不能变化
- 对于 数组 这种数据结构来说,打印出来的是地址值;但是对于 ArrayList 集合来说,直接打印的是内容,如果内容是空,那么打印的是空的中括号。
ArrayList 的注意事项
-
ArrayList 在创建的时候,要使用尖括号
<E>
尖括号中的内容是 “泛型”,代表整个 ArrayList 中的元素的类型。 -
要非常注意的是:泛型
<E>
只能使用引用类型,而不能使用基本数据类型。这是因为集合里面存储的都是地址值,而基本数据类型 int short 等,没有地址值。 -
从 JDK 1.7 开始,右侧的尖括号中的内容可以省略
-
这里让我们回顾一下数据类型的知识:
- byte
- short
- int
- long
- float
- double
- boolean
- char
-
引用数据类型:
- 类:用
class
定义的 - 接口:
List<E>
,Map
,put
- 数组:
int[] nums
;
- 类:用
-
基本数据类型和引用数据类型的区别:
- 基本数据类型的创建在栈中
- 引用数据类型的创建在堆中
- 栈的空间小并且连续,往往会放在缓存里
-
由此,如果我们想创建一个
ArrayList
集合来存放1,23,4
这种数字,应该如何创建呢?答案很简单,如下:
-
Interger
是 包装类,而不是基本数据类型,因此,可以通过将泛型指定为Integer
来将ArrayList
中放入数字。 -
基本数据类型和包装类的对应:
- byte -----> Byte
- short -----> Short
- int -----> Integer
- long -----> Long
- float -----> Float
- double -----> Double
- char -----> Character
- boolean -----> Boolean
-
自从 JDK 1.5 以后,支持自动装箱、拆箱:自动装箱就是将基本数据类型打包成包装类,自动拆箱就是将包装类变成基本数据类型;因此可以直接用
int 变量
直接接受Integer
类的集合中的值。
ArrayList 常用方法
- add():返回值是布尔型,代表是否添加成功
- get (index)
- remove(index):返回值是被删掉的元素
- size() 获取集合的尺寸长度
练习题小试牛刀
题目1:
-
生成 6 个 1~33 之间的随机整数,添加到集合,并遍历集合
import java.util.ArrayList; import java.util.Random; // 题目:生成 6 个 1~33 之间的随机整数,添加到集合,并遍历集合 public class Practice01 { public static void main(String[] args) { Random rd = new Random(); ArrayList<Integer> arr_lst = new ArrayList<>(); for (int i = 0; i < 6; i++) { int number = rd.nextInt(33) + 1; arr_lst.add(number); } // 遍历集合 System.out.println(arr_lst); for (int i = 0; i < arr_lst.size(); i++) { System.out.println(arr_lst.get(i)); } } }
题目2:
- 自定义 3 个学生对象,添加到集合并进行遍历
-
【创建学生类】
public class Student { private int age; private String name; public Student(int age, String name) { this.age = age; this.name = name; } 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 Student() { } }
-
【添加到集合并遍历】
import java.util.ArrayList; public class Practice02 { public static void main(String[] args) { Student stu1 = new Student(19,"wang"); Student stu2 = new Student(20,"li"); Student stu3 = new Student(29,"fang"); ArrayList<Student> arr_lst = new ArrayList<>(); arr_lst.add(stu1); arr_lst.add(stu2); arr_lst.add(stu3); for (int i = 0; i < arr_lst.size(); i++) { Student temp = arr_lst.get(i); System.out.println(temp.getName()+":"+temp.getAge()); } } }
-
题目3:
- 定义以指定格式打印集合的方法(ArrayList 类型作为参数),使用 { } 扩起集合,格式参照:{元素@元素@元素}
- 集合也是可以作为方法的参数的!
import java.util.ArrayList; public class Practice03 { public static void main(String[] args) { ArrayList<String> arrlst = new ArrayList<>(); arrlst.add("hehe"); arrlst.add("xx"); arrlst.add("wwu"); printArrayList(arrlst); } public static void printArrayList (ArrayList<String> arrlst){ System.out.print("{"); // 不换行 for (int i = 0; i < arrlst.size(); i++) { String x = arrlst.get(i); if (i == arrlst.size() - 1) { System.out.println(x + "}"); //最后一个元素的话要+}并换行 } else { System.out.print(x + "@"); //不是最后一个元素不用换行 } } } }
题目4:
-
用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合当中
-
集合类型也可以作为返回类型
import java.util.ArrayList; import java.util.Random; public class Practice04 { public static void main(String[] args) { ArrayList<Integer> arrlst = new ArrayList<>(); ArrayList<Integer> small_lst = new ArrayList<>(); Random rd = new Random(); for (int i = 0; i < 20; i++) { arrlst.add(rd.nextInt()); } small_lst = getSmallArrayList(arrlst); System.out.println(small_lst); } public static ArrayList<Integer> getSmallArrayList(ArrayList<Integer> arrlst){ ArrayList<Integer> s_lst = new ArrayList<>(); for (Integer integer : arrlst) { if (integer % 2 == 0) { s_lst.add(integer); } } return s_lst; } }