文章目录
一、什么是ArrayList类
java.util.ArrayList 是大小可变的数组的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储的元素。 ArrayList 中可不断添加元素,其大小也自动增长。
二、使用步骤
1.查看类
java.util.ArrayList <E>
:该类需要 import导入使后使用。
<E>
表示一种指定的数据类型,叫做泛型。 E ,取自Element(元素)的首字母。在出现 E 的地方,我们使用一种***引用数据类型***将其替换即可,表示我们将存储哪种引用类型的元素。代码如下:
ArrayList<String>,ArrayList<Student>
ArrayList的基本格式为:
ArrayList<String> list = new ArrayList<>();
这里举个ArrayList的小例子,后面再对Arraylist的用法进行讲解。
import java.util.ArrayList;
public class demo02ArrayList {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("add");
list.add("ads");
System.out.println(list);
}
}
运行结果:
2.常用的方法
ArrayList有几下几种常用方法:
/*
ArrayList的常用方法:
public boolean add(E e): 向集合中添加元素,参数的类型和泛型一致
备注:对于ArrayList集合来说,add动作一定是成功的,所以返回值不可用
但是对于其他集合来说,add的添加动作不一定成功。
public E get(int index): 从集合中获取元素,参数书索引编号,返回值是对应位置的元素
public E remove(int index): 从集合中删除元素,参数是索引编号,返回值就是被删除的元素
public int size(): 获取集合尺寸的长度,返回值是集合中包含元素的个数。
*/
这些都是最基本最简单的方法,具体操作代码如下:
import java.util.ArrayList;
public class Demo03ArrayListMethod {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list);
boolean success = list.add("柳岩");
System.out.println(list);
System.out.println("添加动作是否成功:" + success);
list.add("迪丽热巴");
list.add("古力娜扎");
list.add("马尔扎哈");
list.add("上官婉儿");
System.out.println(list);
//从集合中获取元素:get。索引值从0开始
String name = list.get(2);
System.out.println("第2号索引值位置的元素:" + name);
//从集合中删除元素:remove。索引值从0开始
String whoRemoved = list.remove(3);
System.out.println("被删除的人是:" + whoRemoved);
System.out.println(list);
//获取集合的长度尺寸:size
int size = list.size();
System.out.println("集合的长度为:" + size);
}
}
3.如何存储数据类型
上面举的例子是对String类型数据的存储,如果存储int型,double型的数据,是不是可以写成ArrayList<int> or ArrayList<double>
呢?我们在IDEA上试试效果,显然,这样是行不通的。
对于ArrayList对象,它是不能存储基本类型的,只能存储引用类型的数据,类似于、、不能写,但是这些数据类型对应的包装类型是可以的。所以,想要存储基本数据类型,需要将<>中的数据类型转换成对应的包装类型。转换方法如下:
如果希望向集合ArrayList当中存储基本类型数据,必须使用基本类型对应的”包装类“.
基本类型 包装类(引用类型,包装类位于java.lang包下)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
我们发现,只有 Integer 和 Character 需要特殊记忆,其他基本类型只是首字母大写即可。对此,举个int类型数据的存储例子,代码如下:
import java.util.ArrayList;
public class Demo05ArrayListBasic {
public static void main(String[] args) {
ArrayList<String> listA = new ArrayList<>();
//错误写法,泛型只能是引用类型,不能是基本类型。
//ArrayList<int> listB = NewArrayList<>();
ArrayList<Integer> listC = new ArrayList<>();
listC.add(100);
listC.add(200);
listC.add(300);
System.out.println(listC);
}
}
我们可以看到,int类型的数据已经被存到集合当中。
4.ArrayList的遍历
存储完数据以后,当然是取数据。我们如何提取ArrayList里的数据吗?和数组的方式一样吗?
当我们使用遍历数组的方式时,代码报错了。上面我们提到了几种ArrayList的常用方法,其中public E get(int index)
就是提取集合中元素的方法,所以我们将list[i]
改成list.get(i)
,便能遍历集合中的元素,代码如下:
import java.util.ArrayList;
public class Demo04ArrayListEach {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("迪丽热巴");
list.add("古力娜扎");
list.add("马尔扎哈");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
5.ArrayList的练习
学习完ArrayList的基本用法以后,做几个练习熟悉熟悉。
题目和代码我会贴在下面。
5.1、生成6个1~33之间的随机数,添加到集合,并遍历集合.
做题之前,我们先整理一下思路:
- 需要存储6个数字,创建一个集合
- 产生随机数,需要用到Random
- 用循环六次,来产生6个随机数:for循环
- 循环内调用.r.nextInt(int n), 参数33, 0-32,整体+1才是1~33
- 把数字添加到集合中
- 遍历集合,for,get,size
代码如下:
import java.util.ArrayList;
import java.util.Random;
public class Demo01ArrayListRandom {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 6; i++) {
int num = random.nextInt(33) + 1;
list.add(num);
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
5.2、自定义4个学生对象,添加到集合,并遍历
思路:
- 自定义Student学生类,四个部分:有参,无参,get,set
- 创建一个集合,来存储学生对象。泛型:
- 根据类创建四个学生对象
- 将四个学生对象,添加到集合当中
- 遍历集合
代码如下:
import java.util.ArrayList;
public class Demo02ArrayListStudent {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
Student student_one = new Student("老王", 25);
Student student_two = new Student("老张", 28);
Student student_three = new Student("翠花", 21);
Student student_four = new Student("翠芬", 18);
students.add(student_one);
students.add(student_two);
students.add(student_three);
students.add(student_four);
//遍历集合,获取集合中学生信息
for (int i = 0; i < students.size(); i++) {
Student stu = students.get(i);
System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
}
}
}
5.3、定义以指定格式打印集合的方法(ArrayList类型作为参数),使用{}扩起集合,使用@分隔每个元素。格式参照 {元素@元素@元素}。
import java.util.ArrayList;
public class Demo03ArrayListPrint {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("老王");
list.add("老张");
list.add("老李");
ArrayPrint(list);
}
public static void ArrayPrint(ArrayList<String> list){
System.out.print("{");
for (int i = 0; i < list.size(); i++) {
if (i < list.size() - 1){
System.out.print(list.get(i) + "@");
}else {
System.out.print(list.get(i));
}
}
System.out.print("}");
}
}
5.4、定义获取所有偶数元素集合的方法(ArrayList类型作为返回值)
import java.util.ArrayList;
import java.util.Random;
/*
用一个大集合存入20个随机数,然后将集合中的偶数存入小集合中
要求用自定义的方法来实现
*/
public class Demo04ArrayListReturn {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 20; i++) {
list.add(random.nextInt(90));
}
for (int i = 0; i < getArrayList(list).size(); i++) {
System.out.println(getArrayList(list).get(i));
}
}
public static ArrayList<Integer> getArrayList(ArrayList<Integer> list){
ArrayList<Integer> listB = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Integer num = list.get(i);
if(num % 2 == 0){
listB.add(num);
}
}
return listB;
}
}