【JAVA入门】Day07 - ArrayList
集合看似与数组有密不可分的关系,但是集合和数组有两个非常明显的区别。
- 其一,数组的长度是固定的,而集合的长度是可变的。
- 其二,数组既可以存基本数据类型,又可以存引用数据类型;但是集合只能存储引用数据类型。
集合在 Java 编程中有着非常重要的作用,Java 内置了很多种不同的集合,我们以最常用的集合 ArrayList 为引入,逐步拉开集合的幕布。
一、ArrayList 的创建
ArrayList 是一个类,但是它的对象在创建时,引入了全新的概念——“泛型”。
ArrayList<String> list = new ArrayList<String>();
如上所示,尖括号中的内容就是对这个集合能存储的数据类型的一种限定,上面这个集合只能存储字符串类型的元素。注意:ArrayList<String>是一个整体。
在 JDK7 以后,为了写起来省事,后方的尖括号内容可以省略,但是尖括号不能省。
ArrayList<String> list = new ArrayList<>();
要打印 ArrayList ,也可以直接用 sout,此时会把集合中所有的数据用中括号包住打印出来,如果是空 ArrayList,则会打印 [ ] 。
ArrayList<String> list = new ArrayList<>();
System.out.println(list); // []
二、ArrayList的成员方法
主要用到的有增、删、改、查。
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素,返回值表示是否添加成功 |
boolean remove(E e) | 删除指定元素,返回值表示是否删除成功 |
E remove(int index) | 删除指定索引的元素,返回被删除的元素 |
E set(int index,E e) | 修改指定索引下的元素,返回原来的元素 |
E get(int index) | 获取指定索引的元素 |
int size() | 集合的长度,也就是集合中元素的个数 |
2.1 ArrayList的基本操作
利用上面的方法,可以实现 ArrayList 的基本操作。
//1.创建一个集合
ArrayList<String> list = new ArrayList<>();
//2.添加几个元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list);
//3.删除元素
/* boolean result1 = list.remove("aaa");
System.out.println(result1); //true
boolean result2 = list.remove("ddd");
System.out.println(result2); //false */
//3.1 根据索引删除元素,还能返回被删除的元素
String str = list.remove(0);
System.out.println(str); //aaa
//4.修改元素
list.set(1, "ddd");
System.out.println(list); // aaadddccc
//5.查询元素
/* String s = list.get(0);
System.out.println(s); */
//遍历
for (int i = 0; i < list.size(); i++) {
//i 索引
//list.get(i) 元素
String str = list.get(i);
System.out.println(str);
}
1.集合的遍历1
需求:定义一个集合,添加字符串,并进行遍历。遍历格式参照——[元素1, 元素2, 元素3]。
public class Test1 {
public static void main(String[] args) {
//1.创建集合
ArrayList<String> list = new ArrayList<>();
//2.添加字符串
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
//3.遍历
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("]");
}
}
2.集合的遍历2
需求:定义一个集合,添加数字,并进行遍历。遍历格式参照——[元素1, 元素2, 元素3]。
public class Test2 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Integer> list = new ArrayList<>();
//2.添加字符串
list.add(1);
list.add(2);
list.add(3);
list.add(4);
//3.遍历
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("]");
}
}
【补充】基本数据类型的包装类
在 Java 中,基本数据类型都有一个对应的包装类。因为一个集合只能添加引用类型的元素,这个时候基本数据类型就不能直接用 add() 函数添加了,但是我们可以在<>中指定这些数据类型对应的包装类进行添加。
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
ArrayList<Character> list = new ArrayList<>();
list.add('a');
list.add('b');
list.add('c');
3.集合的遍历3
需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名,年龄。
public class Student {
//1.私有化成员变量
//2.空参构造方法
//3.带全部参数的构造方法
//4.set/get方法
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;
}
public class Test3 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Student> list = new ArrayList<>();
//2.创建学生对象
Student s1 = new Student("zhangsan", 23);
Student s2 = new Student("lisi", 23);
Student s3 = new Student("wangwu", 25);
}
//3.添加元素
list.add(s1);
list.add(s2);
list.add(s3);
//4.遍历集合
for(int i = 0; i < list.size(); i++) {
Student stu = list.get(i); // 由于是我们自己定义的对象,不能直接println,所以手写一下输出
System.out.println(stu.getName() + ", " + stu.getAge());
}
4.集合的遍历4
需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名,年龄。(要求键盘录入)
public class Student {
//1.私有化成员变量
//2.空参构造方法
//3.带全部参数的构造方法
//4.set/get方法
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;
}
public class Test4 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Student> list = new ArrayList<>();
//2.键盘录入学生信息创建对象并添加到集合中
Scanner sc = new Scanner(System.in);
for(int i =0; i < 3; i++) {
Student s = new Student();
System.out.println("请输入第" + (i+1) + "位学生的姓名");
String name = sc.next();
System.out.println("请输入第" + (i+1) + "位学生的年龄");
int age = sc.nextInt();
//把name和age赋值给学生对象
s.setName(name);
s.setAge(age);
//把学生对象添加到集合中
list.add(s);
}
//4.遍历集合
for(int i = 0; i < list.size(); i++) {
Student stu = list.get(i); // 由于是我们自己定义的对象,不能直接println,所以手写一下输出
System.out.println(stu.getName() + ", " + stu.getAge());
}
5.添加用户对象并判断是否存在
需求:main方法定义一个集合,存入三个用户对象。用户属性:id, username, password。定义一个方法,根据 id 查找对应的用户信息,如果存在返回 true,如果不存在,返回 false。
public class User {
//1.私有化成员变量
//2.空参构造方法
//3.带全部参数的构造方法
//4.set/get方法
private int id;
private String username;
private String password;
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
public class Test5 {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
User u1 = new User(1, "zhangsan", "123456");
User u2 = new User(2, "lisi", "aaabbbccc");
User u3 = new User(3, "wangwu", "hahahahah");
list.add(u1);
list.add(u2);
list.add(u3);
Scanner sc = new Scanner(System.in);
int id = sc.nextInt();
boolean result = contains(list, id);
System.out.println(result);
}
public static boolean contains(ArrayList<User> list, int id) {
for(int i = 0; i < list.size(); i++) {
if(list.get(i).getId() == id) {
return true;
}
return false;
}
}
}
5.5 添加用户对象并判断是否存在(根据索引)
需求:main方法定义一个集合,存入三个用户对象。用户属性:id, username, password。定义一个 getIndex() 方法,根据 id 查找对应的用户信息,如果存在返回其索引值,如果不存在返回 -1。利用 getIndex() 方法复写 contains() 方法。
public class Test6 {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
User u1 = new User(1, "zhangsan", "123456");
User u2 = new User(2, "lisi", "aaabbbccc");
User u3 = new User(3, "wangwu", "hahahahah");
list.add(u1);
list.add(u2);
list.add(u3);
Scanner sc = new Scanner(System.in);
String id = sc.next();
boolean result = contains(list, id);
System.out.println(result);
}
public static int getIndex(ArrayList<User> list, String id) {
for(int i = 0; i < list.size(); i++) {
User u = list.get(i)
String uid = u.getId();
if(uid.equals(id)) {
return i;
}
}
return -1;
}
public static boolean contains(ArrayList<User> list, String id) {
//利用getIndex()方法复写contains()方法
if(getIndex(list, id) >= 0){
return true;
}else{
return false;
}
}
}
6.添加手机对象并返回要求的数据。
需求:定义 JavaBean 类:Phone。属性:品牌,价格。main 方法中定义一个集合,存入3个手机对象,分别为:“小米”,1000;“苹果”,8000;“锤子”,2999。定义一个方法,将价格低于3000的手机信息返回。
public class Phone {
private String band;
private int price;
public Phone() {
}
public Phone(String band, int price) {
this.band = band;
this.price = price;
}
public static void setBand(String band) {
this.band = band;
}
public static String getBand() {
return band;
}
public static void setPrice(int price) {
this.price = price;
}
public static int getPrice() {
return price;
}
}
public class Test7 {
public static void main(String[] args) {
ArrayList<Phone> list = new ArrayList<>();
Phone p1 = new Phone("小米", 1000);
Phone p2 = new Phone("苹果", 8000);
Phone p3 = new Phone("锤子", 2999);
list.add(p1);
list.add(p2);
list.add(p3);
ArrayList<Phone> phoneInfoList = getPhoneInfo(list);
for(int i = 0; i < phoneInfoList.size(); i++) {
Phone phone = new Phone();
System.out.println(phone.getBand()+ ", " + phone.getPrice());
}
}
public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list) {
ArrayList<Phone> resultlist = new ArrayList<>();
for(int i = 0; i < list.size(); i++) {
Phone p = list.get(i);
int price = p.getPrice();
if(price < 3000) {
//System.out.println(p.getBand()+ ", " + p.getPrice());
resultlist.add(p);
}
}
}
}