ArrayList集合概述和基本使用
- 集合容器和数组容器的区别?
- 如何使用ArrayList集合容器?
总结:
1. 长度:
数组的长度是固定的, 集合的长度是可变的.
存储:
数组可以存储基本数据类型, 也能存储引用数据类型
int[] arr = new int[2];
Person[] pArr = new Person[2];
数组存储基本数据类型, 存储的是具体的值
数组存储引用数据类型, 存储的是地址值.
集合只能存储引用数据类型.
2.创建对象的格式
类名<要存储的数据类型> 对象名 = new 类名<>();
ArrayList<String> list = new ArrayList<>();
注意:
1. 创建集合容器的时候, <>可以省略不写, 但会有数据的安全隐患
问题: <>是什么?
泛型! jdk1.5版本之后引入, 作用是限定集合可以存储什么样的数据类型.
在jdk1.7版本之后, 等号右侧简括号的内容可以省略不写, 菱形泛型.
2. 打印集合对象的对象名, 结果不是地址值, 而是集合中的元素内容
A. 集合中存储的如果是Java写好的类型, 例如String, 那么打印的结果就是元素内容
B. 集合中如果存储的是自定义的类型, 例如Person, 那么打印的结果就是地址值
3. 示例代码
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("bbb");
System.out.println(list); // [abc, bbb]
System.out.println("---------------");
ArrayList<Person> list2 = new ArrayList<>();
list2.add(new Person("张三",23));
list2.add(new Person("李四",24));
System.out.println(list2); // [地址值1, 地址值2]
}
ArrayList集合的常用方法和遍历
- public boolean add(E e)
- 向集合中添加元素
- 返回是否添加成功的状态值
* ArrayList集合, 允许存储重复的, 该方法的返回值永远都是true
* HashSet集合, 不允许存储重复的, 该方法的返回值就跟添加的元素有关(了解)
- public E remove(int index)
- 根据索引, 删除集合中的元素, 该方法返回的是被删除的元素
- public E get(int index)
- 根据索引, 获取集合中对应的元素
- public int size()
- 返回集合的元素个数, 类似数组的length属性
array.length;
list.size();
- 集合的遍历:
示例代码:
public static void main(String[] args){
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("123");
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
}
ArrayList集合存储基本数据类型
- 集合因为泛型的限定, 只能存储引用数据类型, 如果要存储基本数据类型怎么办?
总结: 需要基本数据类型对应的包装类
- 什么是包装类?
- 八种基本数据类型的包装类有哪些?
总结:
1. 将基本数据类型, 包装成了一个类, 类就是引用数据类型了.
2.
byte Byte
short Short
int Integer --> 特殊
long Long
float Float
double Double
char Character --> 特殊
boolean Boolean
ArrayList<Integer> list = new ArrayList<>();
ArrayList<Character> list2 = new ArrayList<>();
暂时了解的知识点:
自动拆装箱, jdk1.5版本之后的特性.
自动拆箱: 将引用数据类型的包装类, 直接赋值给基本数据类型
Integer i = new Integer(100);
int num = i;
自动装箱: 将基本数据类型的数值, 直接赋值给引用数据类型包装类的变量
Integer i = 100;
ArrayList练习一_存储随机数字
- 需求: 生成6个1~33之间的随机整数,添加到集合,并遍历集合。
思路:
1. 需要存储6个数字,创建一个集合,<Integer>
2. 产生随机数,需要用到Random
3. 用循环6次,来产生6个随机数字:for循环
4. 循环内调用r.nextInt(int n),参数是33,0~32,整体+1才是1~33
5. 把数字添加到集合中:add
6. 遍历集合:for、size、get
建议:
如果操作的元素长度是固定, 推荐使用数组
如果操作的元素个数是不确定的, 再使用集合.
ArrayList练习二_存储自定义对象
- 需求: 自定义4个学生对象,添加到集合,并遍历。
思路:
1. 自定义Student学生类,四个部分。
2. 创建一个集合,用来存储学生对象。泛型:<Student>
3. 根据类,创建4个学生对象。
4. 将4个学生对象添加到集合中:add
5. 遍历集合:for、size、get
ArrayList练习三_按指定格式遍历集合字符串
- 需求: 定义以指定格式打印集合的方法(ArrayList类型作为参数)
- 使用{}扩起集合,使用@分隔每个元素。
- 格式参照 {元素@元素@元素}。
- 示例代码:
public static void printArrayList(ArrayList<String> list) {
// {10@20@30}
System.out.print("{");
for (int i = 0; i < list.size(); i++) {
String name = list.get(i);
if (i == list.size() - 1) {
System.out.println(name + "}");
} else {
System.out.print(name + "@");
}
}
}
ArrayList练习四_筛选集合中的随机数.
- 需求: 用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合当中。
- 要求使用自定义的方法来实现筛选。
- 分析:
分析:
1. 需要创建一个大集合,用来存储int数字:<Integer>
2. 随机数字就用Random nextInt
3. 循环20次,把随机数字放入大集合:for循环、add方法
4. 定义一个方法,用来进行筛选。
筛选:根据大集合,筛选符合要求的元素,得到小集合。
三要素
返回值类型:ArrayList小集合(里面元素个数不确定)
方法名称:getSmallList
参数列表:ArrayList大集合(装着20个随机数字)
5. 判断(if)是偶数:num % 2 == 0
6. 如果是偶数,就放到小集合当中,否则不放。
示例代码:
public class Demo04ArrayListReturn {
public static void main(String[] args) {
ArrayList<Integer> bigList = new ArrayList<>();
Random r = new Random();
for (int i = 0; i < 20; i++) {
int num = r.nextInt(100) + 1; // 1~100
bigList.add(num);
}
ArrayList<Integer> smallList = getSmallList(bigList);
System.out.println("偶数总共有多少个:" + smallList.size());
for (int i = 0; i < smallList.size(); i++) {
System.out.println(smallList.get(i));
}
}
// 这个方法,接收大集合参数,返回小集合结果
public static ArrayList<Integer> getSmallList(ArrayList<Integer> bigList) {
// 创建一个小集合,用来装偶数结果
ArrayList<Integer> smallList = new ArrayList<>();
for (int i = 0; i < bigList.size(); i++) {
int num = bigList.get(i);
if (num % 2 == 0) {
smallList.add(num);
}
}
return smallList;
}
}