ArrayList集合类:(单词的第一个字母是大写说明是一个类,但是Array是数组的意思)
概述和基本要求 :
之前我们学习了Array:
public class Person {
private String name;
private int age;
public Person (){
}
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;
}
}
对象数组
*
- 题目:
- 定义一个数组,用来存储3个Person对象。
- 数组有一个缺点:
- 一旦创建,程序运行期间长度不可以发生改变
ublic class Demo01Array {
public static void main(String[]args){
//首先创建一个长度为3的数组,里面用来存放Person类型的对象
Person[] array = new Person[3];//0,1,2
// System.out.println(array[0]);//默认值是规则当中的null值。当然1,2都是一样的
Person one = new Person ("迪丽热巴", 18);//直接使用是成员变量的构造方法直接赋值
Person two = new Person("古力娜扎", 28);
Person three = new Person("玛尔扎哈", 38);
//将one当中的地址值赋值到数组的0号元素位置
array[0] = one;
array[1] = two;
array[2] = three;
System.out.println(array[0]);//地址值
System.out.println(array[1]);//地址值
System.out.println(array[2]);//地址值
// Person person = array[1];
// System.out.println(person.getName());//古力娜扎
System.out.println(array[1].getName());//古力娜扎
//任何数据类型都可以作为数组当中元素的类型,不光存储基本类型,还可以存储字符串类型,还可以存储自定义的Person类型
}
}
Array和ArrayList最大的区别所在:
数组的长度不可以发生改变。
但是ArrayList集合长度是可以随意变化的。
在查看API当中,ArrayList:有个尖括号这个叫泛型
泛型:也就是装载集合当中的所有元素,全部是统一的什么类型。
注意:泛型只能是引用类型,不能是基本类型。
注意事项:
对于ArrayList集合来说,直接打印得到的不是地址值,而是内容。
如果内容是空,得到的是空的中括号。[]
那么有 内容,中括号当中就会显示。
import java.util.ArrayList;
public class Demo02ArrayList {
public static void main(String[]args){
//创建类一个ArrayList集合,集合的名称是list,里面装的全都是String字符串类型的数据
//备注:从JDK1.7开始,右侧的尖括号内部可以不写内容,但是<>本身还是要写上的。
ArrayList<String> list = new ArrayList<String>();
System.out.println(list);//[]
//向集合当中添加一些数据,需要用到add方法。
list.add("赵丽颖");
System.out.println(list);//[赵丽颖]
list.add("迪丽热吧");
list.add("古力娜扎");
list.add("马儿扎哈");
System.out.println(list);//[赵丽颖, 迪丽热吧, 古力娜扎, 马儿扎哈]
// list.add(100);//错误写法,因为创建的时候尖括号泛型已经说了是(<String>)字符串,
//添加进去的元素必须是字符串才行,否则就会报错
}
}
ArrayList集合的常用方法和遍历:
ArrayList当中的常用方法:
pbulic boolen 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<String>();//右侧的尖括号里 // // 的String,在1.7JDK以后就可以省略不行
System.out.println(list);//[]
//向集合中添加元素:add//返回值想用就接受,不想用就直接add就可
boolean success = list.add("柳岩");//add方法是带有返回值的,所以// //要接受(boolean success)一下,
System.out.println(list);
System.out.println("添加的动作是否成功:" + success);//true
list.add("高圆圆");
list.add("赵又廷");
list.add("李小璐");
list.add("贾乃亮");
System.out.println(list);//[柳岩, 高圆圆, 赵又廷, 李小璐, 贾乃亮]
//从集合中获取元素:get。索引值从0开始
String name = list.get(2);
System.out.println("第二号索引位置:" + name);
//从集合中删除元素,remove。索引值是从0开始的。
String whoRemoved = list.remove(3);
System.out.println("被删除的人是谁:" + whoRemoved);//李小璐
System.out.println(list);//[柳岩, 高圆圆, 赵又廷, 贾乃亮]
//获取集合的长度尺寸,也就是其中元素的个数
int size = list.size();
System.out.println("集合的长度是:" + size);//4
}
}
那么集合遍历:
import java.util.ArrayList;
/*Each 是每一个的意思
* */
public class Demo04ListEach {
public static void main(String[]args){
ArrayList<String> list = new ArrayList<String>();
list.add("迪丽热巴");
list.add("古力娜扎");
list.add("马儿咋哈");
// 遍历集合
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
}
}
ArrayList 集合存储类型转换:
/*如果希望向集合ArrayList当中存储基本类型数据,必须使用基本类型对应的“包装类”。
*
- 基本类型 包装类(引用类型,包装类都位于java.lang包下)
- byte Byte
- short Short
- int Integer 【特殊】
- long Long
- float Float
- double Double
- char Character 【特殊】
- boolean Boolean
- 从JDK1.5+开始,支持自动装箱,自动拆箱。
- 自动装箱:基本类型 -->包装类型(自动转换成了引用类型)
- 自动拆箱:包装类型–>基本类型(自动转换成了基本类型)
import java.util.ArrayList;
public class Demo05ArrayListBasic {
public static void main(String[]args){
ArrayList<String> listA = new ArrayList<String>();
//错误写法,泛型只能是引用类型,不能是基本类型
// ArrayList<int> listB = new ArrayList<>();
ArrayList<Integer> listC = new ArrayList<Integer>();
listC.add(100);
listC.add(200);
System.out.println(listC);//[100,200]
int num = listC.get(1);
System.out.println("第1号元素是:"+ num);
}
}
练习题:
第一题:
生成6个1~33之间的随机整数,添加到集合,并遍历集合。
import java.util.ArrayList;
import java.util.Random;
public class Demo05ArrayListRandom {
public static void main(String[]args){
ArrayList<Integer> list = new ArrayList<Integer>();
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 < list.size(); i++){
System.out.println(list.get(i));
}
}
}
在集合当中存储自己定义的对象
第二题:
自定义4个学生对象,添加到集合,并遍历
思路:
1,要学生对象,就应该现有学生类,自定义Student学生类,四个部分:
一个标准的类,1,所以的成员变量都用private,2,要有无参构造,3,有全参构造,4,get. set
2,创建一个集合,用来存储学生对象,泛型:
3,根据类,创建4个学生对象,并且赋值,
4,将4个学生对象添加到集合当中。add
5,遍历集合:for , size, get
首先创建一个学生类
public class Student {
private String name;
private int age;
public Student(){
}
public Student(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;
}
}
在创建集合
import java.util.ArrayList;
ublic class Demo02ArrayListStudent {
public static void main(String[] args){
ArrayList<Student> list = new ArrayList<Student>();
Student one = new Student("洪七公", 20);
Student two = new Student("欧阳锋", 21);
Student three = new Student("黄药师", 22);
Student four = new Student("段智兴", 23);
list.add(one);
list.add(two);
list.add(three);
list.add(four);
//遍历集合
for(int i = 0; i < list.size(); i++){
Student stu = list.get(i);
System.out.println("姓名:" + stu.getName() + ". 年龄" + stu.getAge());
}
}
}