1、集合的基本应用
数组的长度是固定的,集合的长度是可变的,集合具有自动扩容的功能。
数组可以存基本数据类型和引用数据类型,集合只能存储引用数据类型,基本数据类型只有设置成包装类才能存储在集合当中。
ArrayList成员方法
package GGG;
import java.util.ArrayList;
public class hhh {
public static void main(String[] args) {
//1、创建集合对象
//泛型:限定集合中存储数据的类型
ArrayList<String> list = new ArrayList<>();
/**
* 此时我们创建的是ArrayList的对象,而ArrayList是Java已经写好的一个类,
* 这个类在底层做了一些处理
* 打印对象不是地址值,而是集合中存储数据内容
* 在展示的时候会用[]把所有的数据进行包裹
*/
System.out.println(list); //打印空集合[]
//1、添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
System.out.println(list); //打印添加元素之后的集合[aaa, bbb, ccc, ddd, eee]
//2、删除元素
boolean result = list.remove("aaa");
System.out.println(result); //判断是否删除成功,true
System.out.println(list); //打印删除元素之后的结果[bbb, ccc, ddd, eee]
String str = list.remove(1);
System.out.println(str); //打印被删除的元素ccc
System.out.println(list); //打印删除元素之后的结果[bbb, ddd, eee]
//3、修改元素
String result2 = list.set(1,"hhh");
System.out.println(result2); //打印被替换掉的元素,ddd
System.out.println(list); //打印替换元素后的集合[bbb, hhh, eee]
//4、查询元素
String s = list.get(0); //查询0索引上的元素
System.out.println(s); //查询到元素bbb
System.out.println(list);
}
}
2、集合练习-添加字符串和整数并遍历
案例1:集合的遍历方式
需求:定义一个集合,添加字符串,并进行遍历,遍历格式参照:[元素1,元素2,元素3]。
package GGG;
import java.util.ArrayList;
public class hhh {
public static void main(String[] args) {
//1、创建集合对象
//泛型:限定集合中存储数据的类型
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
//System.out.println(list); //打印添加元素之后的集合[aaa, bbb, ccc, ddd, eee]
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.println("]");
}
}
案例2:添加数字并遍历
需求:定义一个集合,添加数字,并进行遍历,遍历格式参照:[元素1,元素2,元素3]。
补充内容:基本数据类型对应的包装类如下
package GGG;
import java.util.ArrayList;
public class hhh {
public static void main(String[] args) {
//1、创建集合对象
//泛型:限定集合中存储数据的类型
ArrayList<Integer> list = new ArrayList<>(); //注意存储数据的类型为整数
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
System.out.println(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.print(list.get(i) + ",");
}
}
System.out.println("]");
}
}
3、添加学生对象并遍历的两个练习
案例1:添加学生对象并遍历
需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名、年龄。
package GGG;
public class Student {
//1、私有化成员变量
//2、空参构造方法
//3、带全部参数的构造方法
//4、get/set方法
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;
}
}
package GGG;
import java.util.ArrayList;
public class hhh {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
//2、创建学生对象
Student s1 = new Student("张三",23);
Student s2 = new Student("李四",24);
Student s3 = new Student("王二",22);
//3、添加元素
list.add(s1);
list.add(s2);
list.add(s3);
for (int i = 0; i < list.size(); i++) {
//i索引 list.get(i) 元素/学生对象
Student stu = list.get(i);
System.out.println(stu.getName() + "," + stu.getAge());
}
}
}
案例2:添加学生对象并遍历
需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名、年龄。要求:对象的数据来自键盘录入。
package GGG;
public class Student {
//1、私有化成员变量
//2、空参构造方法
//3、带全部参数的构造方法
//4、get/set方法
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;
}
}
package GGG;
import java.util.ArrayList;
import java.util.Scanner;
public class hhh {
public static void main(String[] args) {
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("请输入学生的姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
//把name和age赋值给学生对象
s.setName(name);
s.setAge(age);
//把学生对象添加到集合当中
list.add(s);
}
for (int i = 0; i < list.size(); i++) {
//i索引 list.get(i) 元素/学生对象
Student stu = list.get(i);
System.out.println(stu.getName() + "," + stu.getAge());
}
}
}
4、集合练习-查找用户是否存在
案例1:添加用户对象,并判断是否存在
1、main方法中定义一个集合,存入三个用户对象。
用户属性为:id,username,password
2、要求:定义一个方法,根据id查找对应的用户信息。若存在返回true,若不存在返回false
package HHH;
public class User {
//1、私有化成员变量
//2、空参构造方法
//3、带全部参数的构造方法
//4、get/set方法
private String id ;
private String username ;
private String password;
public User() {
}
public User(String id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public String 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;
}
}
package HHH;
import java.util.ArrayList;
import java.util.Scanner;
public class Dome {
public static void main(String[] args) {
ArrayList<User> list1 = new ArrayList<>();
//2、键盘录入学生的信息,并添加到集合当中
Scanner sc = new Scanner(System.in);
User u1 = new User("001", "zhangsan", "123");
User u2 = new User("002", "lisi", "456");
User u3 = new User("003", "wanger", "789");
list1.add(u1);
list1.add(u2);
list1.add(u3);
boolean ss = search(list1, "005");
System.out.println(ss);
}
public static boolean search(ArrayList<User> list,String id){
for (int i = 0; i < list.size(); i++) {
//i索引 list.get(i) 元素/用户对象
User u = list.get(i);
if(u.getId().equals(id)){
return true;
}
}
return false;
}
}
案例2:添加用户对象,并判断是否存在
1、main方法中定义一个集合,存入三个用户对象。
用户属性为:id,username,password
2、要求:定义一个方法,根据id查找对应的用户信息。若存在返回索引,若不存在返回-1
package HHH;
public class User {
//1、私有化成员变量
//2、空参构造方法
//3、带全部参数的构造方法
//4、get/set方法
private String id ;
private String username ;
private String password;
public User() {
}
public User(String id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public String 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;
}
}
package HHH;
import java.util.ArrayList;
import java.util.Scanner;
public class Dome {
public static void main(String[] args) {
ArrayList<User> list1 = new ArrayList<>();
//2、键盘录入学生的信息,并添加到集合当中
Scanner sc = new Scanner(System.in);
User u1 = new User("001", "zhangsan", "123");
User u2 = new User("002", "lisi", "456");
User u3 = new User("003", "wanger", "789");
list1.add(u1);
list1.add(u2);
list1.add(u3);
int ss = search(list1, "002");
System.out.println(ss);
}
public static int search(ArrayList<User> list,String id){
for (int i = 0; i < list.size(); i++) {
//i索引 list.get(i) 元素/用户对象
User u = list.get(i);
if(u.getId().equals(id)){
return i;
}
}
return -1;
}
}
5、集合练习-返回多个数据
案例1:添加手机对象,并返回要求的数据。
需求:定义Javabean类:Phone
Phone属性:品牌、价格。
main方法中定义一个集合,存入三个手机对象。
分别为:小米,1000。苹果,8000。锤子,2999。
定义一个方法,将价格低于3000的手机信息返回。
package GGGG;
import java.util.ArrayList;
public class PhoneDome {
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 = printf(list);
//循环遍历新得到的集合元素
for (int i = 0; i < phoneInfoList.size(); i++) {
Phone phone = phoneInfoList.get(i);
System.out.println(phone.getName()+","+phone.getPrice());
}
}
//由于返回值为对象,所以用ArrayList<Phone>作为返回值类型
public static ArrayList<Phone> printf(ArrayList<Phone> list){
/**技巧:
* 如果我们要返回多个数据,可以先把这些数据放到一个容器当中,再把容器返回
* 容器可以为 集合 数组
*/
//定义一个集合用于存储价格低于3000的手机对象
ArrayList<Phone> resultList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Phone p = list.get(i);
//如果当前的手机价格低于3000,那么就把手机对象添加到resultList中
if(p.getPrice() < 3000){
//System.out.println(p.getName());
//System.out.println(p.getPrice());
resultList.add(p);
}
}
return resultList;
}
}