#java基础之集合(ArrayList)
###引入:定义一个数组时,数组的大小是固定的,程序一旦运行长度便不可改变,所以引入集合,java中大部分集合都是可以改变的
##ArrayList集合
ArrayList<E>
- 1.对于ArrayList集合来说,有一个尖括号代表泛型。
- 2.泛型,也就是装在集合当中的所有元素,全部是同一的类型。
- 3.注意泛型只能是引用类型,不能是基本类型。
ArrayList<String> list = new ArrayList<>();
- 创建一个ArrayList集合,集合的名称是list,里面装的全是String字符串类型的数据
- 从JDk1.7开始之后,右侧的尖括号内的内容可以不写,但<>本身还是要有的。
ArrayList<String> list = new ArrayList<>();
System.out.println(list);
- 对于一个ArrayList集合来说,直接打印得到的不是地址值,而是内容。
- 如果是空,得到的是空的中括号[]
- 如果ArrayList中有内容,则打印的是以[元素, 元素, 元素],这样的格式进行打印
代码:
package day6;
import java.util.ArrayList;
public class demo02ArrayList {
public static void main(String[] args) {
//创建一个ArrayList集合,集合的名称是list,里面装的全是String字符串类型的数据。
//备注,JDK1.7及以上右侧尖括号可以不写
ArrayList<String> list = new ArrayList<>();
System.out.println(list);
//向集合中添加一些数据,需要用到add方法。
list.add("迪丽热巴");
System.out.println(list);
//ArrayList集合打印的不是地址值,而是内容。
//如果是空,则得到的是空的中括号[]
list.add("古力娜扎");
list.add("玛尔扎哈");
list.add("hwyongqiang");
System.out.println(list);
//如果ArrayList中有内容,则打印的是以[元素, 元素, 元素],这样的格式进行打印
}
}
##ArryayList当中的常用方法
- public boolean add(E e);向集合中添加元素,参数类型和泛型一致,返回值代表是否添加成功。备注:对于ArrayList集合来说,add添加动作一定会成功的,所以返回值可用可不用,但对于其他集合来说,add添加动作不一定成功。
- public E get(int index);从集合中获取元素,参数是索引编号,返回值就是对应位置的元素。
- public E remove(int index);从集合中删除元素,参数是索引编号,返回值是被删除掉的元素。
- public int size();获取集合的的尺寸长度,返回值是集合中包含的元素个数。
public class demo03 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list);
//向集合中添加元素:add;
System.out.println("向集合中添加元素:add");
boolean success = list.add("柳岩");
System.out.println(list);
System.out.println("添加集合是否成功:" + success);
list.add("高圆圆");
list.add("欧阳娜娜");
list.add("甄子丹");
System.out.println(list);
//从集合中获取元素:get。索引从0开始
String s = list.get(3);
System.out.println("3号索引位置是:" + s);
//从集合中删除元素:remove 索引从0 开始
String remove = list.remove(1);
System.out.println("删除的是:"+ remove);
System.out.println(list);
//获取集合的长度尺寸,也就是其中的元素个数
int size = list.size();
System.out.println("集合的长度是:" + size);
//遍历集合:
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开始,支持自动装箱,自动拆箱。
- 自动装箱:基本类型 --> 包装类型
- 自动拆箱:引用类型 --> 基本类型
public class demo04 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
//使用Integer引用类型接收
Integer integer = list.get(0);
System.out.println(integer);
System.out.println("----------------");
//使用int类型接收
int integer2 = list.get(1);
System.out.println(integer2);
}
}
##练习题一:生成个1~33之间的随机整数,添加到集合,并遍历集合。
public class demo05 {
public static void main(String[] args) {
/**
* @param: [args]
* @return: void
* @Description:
* 思路:
* 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<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 < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
练习题二::自定义四个学生对象,添加到集合,并遍历
/**
* 思路:
* 1.自定义学生(Student)类,一个标准的类有四个部分:所有成员变量用Private,有参构造,无参构造,getset。
* 2.创建一个集合,用来存储学生对象,泛型<Student>
* 3.根据类,创建四个学生对象。
* 4.将四个学生对象添加到集合:add
* 5.遍历集合:for、size、get
*/
public class demo06 {
public static void main(String[] args) {
//创建集合
ArrayList<Student> list = new ArrayList<>();
//创建学生对象
Student one = new Student("彭于晏",25);
Student two = new Student("成龙",24);
Student three = new Student("胡歌",23);
Student four = new Student("甄子丹",22);
//将对象添加到集合中
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());
}
}
##练习题三:定义一个打印集合的方法(ArrayList作为参数),使用{}括起集合,使用@分割元素。格式参照{元素@元素@元素}(练习目的:集合也是可以当参数传递的,以地地址形式)
public class Print {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("张四");
list.add("张五");
list.add("张六");
System.out.println(list);//[张三, 张四, 张五, 张六]
printlist(list);
/*
*定义方法的三要素:
* 返回值类型:只进行打印,void
* 方法名称:printList
* 参数列表:ArrayList
*
*
* Expression expected 语法错误
*/
}
public static void printlist(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.println(list.get(i) + "}");
}
}
}
}
##题目四:用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合中,要求使用自定义方法实现(目的:集合既可以当参数传递,也可以当返回值返回)
public class demo07 {
/*
*思路:
* 1.需要创建一个大集合,用来存储int数字,<Integer>
* 2.随机数字用Random nextInt
* 3.循环20次,把随机数字放入到大集合中,for循环,add方法
* 4.定义一个方法,用来进行筛选。
* 筛选:根据大集合,筛选符合要求的元素,得到小集合
* 三要素:
* 返回值类型:ArrayList小集合(里面的个数不确定)
* 方法名称:getSmallList
* 参数列表:ArrayList大集合(里面装着20个随机数字)
* 5.判断(if)是偶数,num % 2 == 0
* 6.如果是偶数,就放到小集合中,否则不放
*/
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;
bigList.add(num);
}
System.out.println(bigList);
ArrayList<Integer> smallList = getSmallList(bigList);
System.out.println(smallList);
}
//此方法接收大集合,返回小集合
public static ArrayList<Integer> getSmallList(ArrayList<Integer> bigList) {
ArrayList<Integer> smallList = new ArrayList<>();
for (int i = 0; i < bigList.size(); i++) {
if (bigList.get(i) % 2 == 0) {
smallList.add(bigList.get(i));
}
}
return smallList;
}
}