目录
4.ArrayList集合
4.1.对象数组
1.对象数组:用来存放对象的数组。本质上是存储的是对象的引用(地址)。
2.语法:元素类型[] 数组引用名=new 元素类型[元素个数]
例如:int[] array=new int[3]; 存放3个int类型的数组
例如:Person[] array=new Person[3];
创建一个长度为3的对象数组,存放Person类型的对象
3.功能:可以存储自定义的对象类型的数据。
4.缺点:数组一旦创建,程序运行期间,数组长度不可以改变
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
}
public class ArrayList1 {
public static void main(String[] args) {
//首先创建一个长度为3的数组,存放Person类型的对象
Person[] array=new Person[3];
//创建三个对象
Person one=new Person("zhangsan",18);
Person two=new Person("lisi",20);
Person three=new Person("wangwu",30);
//将对象存入数组中,即将对象的引用(地址)存入数组
array[0]=one;
array[1]=two;
array[2]=three;
//输出的是数组中存储的地址值
for (int i = 0; i < 3; i++) {
System.out.println(array[i]);
}
//输出数组中存储的引用(地址)所指向的对象的name属性。
for (int i = 0; i < 3; i++) {
System.out.println(array[i].getName());
}
}
}
4.2.ArrayList集合的创建
java.util.ArrayList集合类:本质是一个实现了大小可变的数组。
1.到目前为止,我们想存储对象数据,选择的容器,只有对象数组。而数组的长度是固定的,无法适应数据变化的需求。为了解决这个问题,Java提供了另一个容器 java.util.ArrayList集合类,
2.java.util.ArrayList 是大小可变的数组的实现,ArrayList 中可不断添加元素,其大小也自动增长。
3.对于ArrayList集合类,有一个尖括号<E>代表泛型。
泛型:就是装在集合当中的所有元素的类型。
注意:泛型只能是引用类型,不能是基本类型。
4.注意事项:
对于ArrayList集合来说,System.out.println(list);直接打印得到的不是地址值,而是list集合内容(或数组[...]),若是数组则输出地址。
4.3.ArrayList集合常用方法
1.public boolean add(E e):向集合中添加元素,参数的类型和泛型一致,返回布尔类型。
2.public E get(int index):从集合中获取元素,参数是索引编号,返回值就是对应位置元素。
3.public E remove(int index):从集合中删除元素,参数是索引编号,返回值是被删除的元素。
4.public int size():获取集合的尺寸长度,返回值是集合中元素个数。
2.备注:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可以不写,但是对于其它集合来说,add添加动作不一定成功
public class ArrayList3 {
public static void main(String[] args) {
ArrayList<String>list=new ArrayList<>();
//1.向集合中添加数据:add
//备注:只有ArrayList集合的add方法可以不用返回值,其它集合要。
boolean bol=list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
list.add("maliu");
System.out.println(list);
System.out.println("添加的动作是否成功:"+bol);
//2.从集合中获取元素:get,索引从0开始
String name=list.get(0);
System.out.println("list集合中0号索引位置是"+name);
//3.从集合中删除元素:remove,索引从0开始
String whoRemoved=list.remove(0);
System.out.println("被删除的人是:"+whoRemoved);
System.out.println(list);
//4.获取集合的长度,即元素的个数
int size=list.size();
System.out.println("集合的长度是:"+size);
}
}
4.4.ArrayList存储基本数据类型--用包装类
1.需求:在ArrayList集合中存储基本数据类型
2.备注:
集合中保存的都是地址值(引用),只能存储引用类型数据,不能存储基本类型数据。
3.解决:如果希望向集合ArrayList当中存储基本数据类型,必须使用基本类型对应的"包装类"
4.包装类:
基本类型 包装类(引用类型,包装类都位于java.lang包下,即不用导包)
byte Byte
short Short
int Integer 【特殊】
long Long
float Float
double Double
char Character 【特殊】
boolean Boolean
5.注意事项:
从JDK1.5开始,支持自动装箱,自动拆箱.
自动装箱:基本类型--->包装类型(引用类型)
自动拆箱:包装类型--->基本类型。
public class ArrayList4 {
public static void main(String[] args) {
//自动装箱拆箱,即int型数据直接放进集合,获取集合中元素直接用int接受;
//前提是将创建集合时把定义基本数据类型改为包装类类型(引用类型)。
ArrayList<Integer>list=new ArrayList<>();
list.add(100);
list.add(200);
list.add(300);
System.out.println(list);
int num= list.get(0);
System.out.println(num);
}
}
4.5.ArrayList集合练习
练习一:生成6个1-33之间的随机整数,添加到集合,并遍历集合
public class ArrayList5 {
public static void main(String[] args) {
ArrayList<Integer>list=new ArrayList<>();
Random r=new Random();
for (int i = 0; i < 6; i++) {
int num = r.nextInt(33)+1;
list.add(num);
}
//遍历集合
for (int i = 0; i < 6; i++) {
System.out.println(list.get(i));
}
}
}
练习二:自定义4个学生对象,添加到集合,并遍历
public class ArrayList6 {
public static void main(String[] args) {
//创建集合,泛型<Student>,存放Student对象
ArrayList<Student>list=new ArrayList<>();
//创建4个Student对象
Student one=new Student("zhangsan",15);
Student two = new Student("lisi", 50);
Student three = new Student("wangwu", 56);
Student four = new Student("chenliu", 40);
//将4个对象装入集合ArrayList,本质上装入的是对象的引用(地址)
list.add(one);
list.add(two);
list.add(three);
list.add(four);
//遍历集合ArrayList
for (int i = 0; i < 4; i++) {
Student stu=list.get(i); //存入的是对象,拿出来的也是对象
System.out.println("姓名:"+stu.getName()+",年龄:"+stu.getAge());
}
}
}
练习三:集合作为方法参数
题目:定义以指定格式打印集合的方法(ArrayList类型作为参数),使用{}包裹集合,使用@分隔元素。
格式参照:{元素1@元素2@元素3}
系统默认System.out.println(list)----[10,20,30]
自定义printArrayList(list)----------{10@20@30}
public class ArrayList7 {
public static void main(String[] args) {
//创建集合
ArrayList<String>list=new ArrayList<>();
//添加元素
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
printArrayList(list);
}
/*
定义方法的三要素:
返回类型:没有返回类型,void
方法名称:printArrayList
参数列表:ArrayList (把集合传过来才可以输出集合内容)
*/
public static void printArrayList(ArrayList<String> list){
//当集合作为方法参数时,方法接收到的参数是地址值(引用传递),根据地址值就可以调用方法。
System.out.println("{");
for (int i = 0; i < list.size(); i++) {
String name=list.get(i);
if(list.size()==-1){ //最后一个
System.out.println(name+"}");
}else{
System.out.println(name+"@");
}
}
}
}
练习四:集合作为方法参数和返回值
题目:使用大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合当中。
要求使用自定义方法实现筛选。
public class ArrayList8 {
public static void main(String[] args) {
ArrayList<Integer>bigList=new ArrayList<>();
Random r=new Random();
for (int i = 0; i < 20; i++) {//随机生成20个数装入集合
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;
}
}