0x00 对象数组
数组有一个缺点:
一旦创建,程序运行期间长度不可以发生改变。
0x01 ArrayList类
ArrayList类和数组的区别:
数组的长度不可以发生改变;但是ArrayList集合的长度是可以随意变化的。
对于ArrayList来说,有一个尖括号
泛型:也就是装在集合当中的所有元素,全都是统一的什么类型。
注意:泛型只能是引用类型,不能是基本类型。
PS:在创建ArrayList集合的时候,从JDK 1.7+开始,右侧的尖括号内部可以不写内容,但是<>本身还是要写的。
注意事项:
- 对于ArrayList集合来说,直接打印得到的不是地址值,而是内容。
如果内容是空,得到的是空的中括号:【】。 - 在新建ArrayList集合的时候,泛型里面写的什么数据类型,就只能往其中插入那种类型的数据。
向集合当中添加一些数据,需要用到add方法。
ArrayList集合的常用方法和遍历
ArrayList当中的常用方法有:
- public boolean add(E e):向集合当中添加元素,参数的类型和泛型一致。返回值代表添加是否成功。
备注:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可用可不用。但是对于其他集合来说,add添加动作不一定成功。 - public E get(int index):从集合当中获取元素,参数是索引编号,返回值就是对应位置的元素。
- public E remove(int index):从集合当中删除元素,参数是索引编号,返回值就是被删除掉的元素。
- public int size():获取集合的尺寸长度,返回值是集合中包含的元素个数。
ArrayList集合存储基本数据类型
注意:因为集合的泛型只能是引用类型,不能是基本类型。因为集合保存的是地址值,而基本类型没有地址值。
如果希望向集合ArrayList当中存储基本类型数据,必须使用基本类型对应的“包装类“。
基本类型 包装类(引用类型,包装类都位于java.lang包下)
byte Byte
short Short
int Integer【特殊】
long Long
float Float
double Double
char Character【特殊】
boolean Boolean
从JDK 1.5+开始,支持自动装箱、自动拆箱。
自动装箱:基本类型--> 包装类型
自动拆箱:包装类型--> 基本类型
练习1:生成6个1-33之间的随机整数,添加到集合中,并遍历集合。
package day11;
/*题目:生成6个1-33之间的随机整数,添加到集合中,并遍历集合。 */
import java.util.ArrayList;
import java.util.Random;
public class lianxi01 {
public static void main(String[] args) {
Random r = new Random();
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 6; i++) {
int ran = r.nextInt(33) + 1;
list.add(ran);
}
for (int i = 0; i < list.size() ; i++) {
System.out.println(list.get(i));
}
}
}
练习2:自定义4个学生对象,添加到集合,并遍历。
package day11;
/*题目:自定义4个学生对象,添加到集合,并遍历。 */
import java.util.ArrayList;
public class lianxi02 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
Student one = new Student("万丽娜",18);
Student two = new Student("鞠婧祎",18);
Student three = new Student("费沁源",18);
Student four = new Student("徐子轩",18);
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());
}
}
}
练习3:定义以指定格式打印集合的方法(ArrayList类型作为参数),使用大括号{}括起集合,使用@分割元素。格式参考{元素@元素@元素}
package day11;
/*题目:定义以指定格式打印集合的方法(ArrayList类型作为参数),使用大括号{}括起集合,使用@分割元素。格式参考{元素@元素@元素} */
import java.util.ArrayList;
public class lianxi03 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("小明");
list.add("小红");
list.add("小刚");
list.add("小强");
System.out.println(list);
printArrayList(list);
}
public static void printArrayList(ArrayList<String> list){
System.out.print("{");
for (int i = 0; i <list.size() ; i++) {
String name = list.get(i);
if (i == list.size() -1 ){
System.out.print(name + "}");
} else {
System.out.print(name + "@");
}
}
}
}
练习4:用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合当中;要求使用自定义方法来实现筛选
package day11;
/*题目:用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合当中要求使用自定义方法来实现筛选。 */
import java.util.ArrayList;
import java.util.Random;
public class lianxi04 {
public static void main(String[] args) {
Random r = new Random();
ArrayList<Integer> list1 = new ArrayList<>();
for (int i = 0; i <20 ; i++) {
int num = r.nextInt(100);
list1.add(num);
}
System.out.println(list1);
ArrayList<Integer> list2 = get2list(list1);
System.out.println("偶数总共有:"+list2.size());
System.out.println(list2);
}
public static ArrayList<Integer> get2list(ArrayList<Integer> list1){
ArrayList<Integer> list2 = new ArrayList<>();
for (int i = 0; i <list1.size() ; i++) {
int num = list1.get(i);
if (num % 2 == 0){
list2.add(num);
}
}
return list2;
}
}