来不及悼念字符串了,接下来登场的是集合,集合和数组的用法差不多,不同之处就在于存储的内容,数组是固定的长度的,集合的长度不固定。学习的过程中可以参照数组
今天已经是学习java的第八天了,接下来的课程都属于进阶部分了。基础部分已经彻底结束了。还是那句话,面向对象十分重要,接下来还会对面向对象进行深入的学习。
java基础部分一览
ArrayList 是 Java 中非常常用的动态数组实现,它继承了 AbstractList 并实现了 List 接口。
ArrayList 内部使用数组来存储元素,相比于普通的数组,它具有以下优点:
ArrayList 会自动增加其内部数组的容量,以容纳新的元素。ArrayList 实现了 List 接口,因此具有列表的所有特性:
允许存储重复元素。
保持元素的插入顺序。
提供了丰富的操作方法,如添加、删除、获取元素等。
ArrayList 的性能非常好。在随机访问和尾部插入/删除的操作中表现优异。ArrayList 内部使用一个 Object[] 数组来存储元素。当需要增加元素时,如果当前数组容量不足,会创建一个新的更大容量的数组,并将原来的元素复制到新数组中。这种机制保证了 ArrayList 的动态性和高效性。
ArrayList 不是线程安全的,如果需要在多线程环境下使用,可以考虑使用 Collections.synchronizedList() 或 CopyOnWriteArrayList。要创建一个 ArrayList,需要导入 java.util.ArrayList 并实例化它:
- import java.util.ArrayList;
-
- public class ArrayList01 {
- public static void main(String[] args) {
- //1.创建集合
- ArrayList
list = new ArrayList(); - }
- }
- //2.添加元素
- list.add("A");
- list.add("B");
- list.add("C");
- list.add("D");
- //3.删除元素
- boolean result1 = list.remove("A");
- System.out.println(result1);
- System.out.println(list);
-
- boolean result2 = list.contains("E");
- System.out.println(result2);
- System.out.println(list);
-
- String str = list.remove(0);
- System.out.println(str);
- System.out.println(list);

result1为true:因为集合中有A这个元素。
result2为false:因为集合中没有B这个元素。
str为B:list.remove(0)代表list中下标为0的元素。
- //4.修改元素
- String result3 = list.set(0,"E");
- System.out.println(result3);
- System.out.println(list);

语法:list.set(想要修改元素的下标,修改后的新值)
- //5.查找元素
- String result4 = list.get(1);
- System.out.println(result4);
- System.out.println(list);

语法:list.get(查找元素的下标)
- //6.遍历
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
类似数组的遍历,for、while循环都可以
需求:定义一个集合,添加字符串,并进行遍历
遍历格式:[元素一、元素二、元素三]
- import java.util.ArrayList;
-
- public class text1 {
- public static void main(String[] args) {
- //1.创建集合
- ArrayList
list = new ArrayList<>(); - //2.添加元素
- list.add("Hello");
- list.add("World");
- list.add("!");
- //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.println("]");
- }
- }

System.out.print("["); 打印左括号 [,作为输出的起始标志。
for 循环遍历 list 中的每个元素:
list.size() 返回列表中元素的个数,循环条件 i < list.size() 确保循环遍历到所有元素。
list.get(i) 获取索引为 i 的元素。
根据索引 i 是否是最后一个元素,使用条件判断来决定是直接打印元素还是打印元素后跟随逗号。
System.out.println("]"); 打印右括号 ],作为输出的结束标志,并换行。
需求:定义一个集合,添加数字,并进行遍历
遍历格式:[元素一、元素二、元素三]

- public class text2 {
- public static void main(String[] args) {
- //1.创建集合
- ArrayList
list = new ArrayList<>(); - //2.添加元素
- list.add(1);
- list.add(2);
- list.add(3);
- //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.println("]");
- }
- }

需求:定义一个集合,添加一些学生对象,并进行遍历。
学生对象的属性:姓名、年龄。
- public class Student {
- private String name;
- private int age;
- public Student(String name, int age) {
- this.name = name;
- this.age = age;
- }
-
- public Student() {
- }
-
- 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;
-
- public class text3 {
- public static void main(String[] args) {
- //1.创建集合
- ArrayList
list=new ArrayList<>(); -
- //2.创建学生对象
- Student s1=new Student("张三",18);
- Student s2=new Student("李四",19);
- Student s3=new Student("王五",22);
-
- //3.添加元素
- list.add(s1);
- list.add(s2);
- list.add(s3);
-
- //4.遍历输出学生信息
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i).getName()+'\t'+list.get(i).getAge());
- }
- }
- }
使用 for 循环遍历 list 中的每个 Student 对象:
list.size() 返回列表中元素的个数,循环条件 i < list.size() 确保循环遍历到所有元素。list.get(i) 获取索引为 i 的 Student 对象。list.get(i).getName() 和 list.get(i).getAge() 分别获取当前 Student 对象的名字和年龄。System.out.println() 打印每个学生的姓名和年龄,使用 '\t' 进行姓名和年龄的分隔。
需求:定义一个集合,键盘录入一些学生对象,并进行遍历。
学生对象的属性:姓名、年龄。
- public class text3 {
- public static void main(String[] args) {
- //1.创建集合
- ArrayList
list=new ArrayList<>(); - Scanner sc=new Scanner(System.in);
- //2.键盘录入学生对象
- for(int i=0;i<3;i++){
- Student s=new Student();
- System.out.println("请输入学生姓名:");
- s.setName(sc.next());
- System.out.println("请输入学生年龄:");
- s.setAge(sc.nextInt());
- list.add(s);
- }
- //3.遍历输出学生信息
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i).getName()+'\t'+list.get(i).getAge());
- }
- }
- }

需求:集合存入用户信息,用户属性有:id,username、password
要求:定义一个方法,根据ID查询用户信息
如果存在,返回true
如果不存在,返回false
- public class User {
- 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(int 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 text4 {
- public static void main(String[] args) {
- //1.定义集合
- ArrayList
list=new ArrayList<>(); - //2.添加用户信息
- Scanner sc=new Scanner(System.in);
- for (int i = 0; i < 3; i++) {
- User user=new User();
- System.out.print("请输入用户id:");
- user.setId(sc.nextInt());
- System.out.print("请输入用户名:");
- user.setUsername(sc.next());
- System.out.print("请输入用户密码:");
- user.setPassword(sc.next());
- list.add(user);
- }
- //3.根据id查找用户信息
- System.out.print("请输入你要查找的id:");
- int id=sc.nextInt();
- for (int i = 0; i < list.size(); i++) {
- if(list.get(i).getId()==id){
- System.out.println(true);
- break;
- }else{
- System.out.println(false);
- break;
- }
- }
- }
- }
查找用户信息的循环:
for 循环遍历 list 中的每个 User 对象。User 对象的 id 进行比较。true 并结束循环。false 并结束循环。
需求:定义一个phone类
phone属性:品牌,价格
定义一个方法,将价格低于3000的手机信息返回
- public class Phone {
- private String brand;
- private int price;
-
- public Phone() {
- }
-
- public Phone(String brand, int price) {
- this.brand = brand;
- this.price = price;
- }
-
- public String getBrand() {
- return brand;
- }
-
- public void setBrand(String brand) {
- this.brand = brand;
- }
-
- public int getPrice() {
- return price;
- }
-
- public void setPrice(int price) {
- this.price = price;
- }
- }
- public class text5 {
- public static void main(String[] args) {
- //1.创建集合
- ArrayList
list=new ArrayList<>(); - //2.存放手机信息
- Phone phone1=new Phone("小米",1000);
- list.add(phone1);
- Phone phone2=new Phone("苹果",8000);
- list.add(phone2);
- Phone phone3=new Phone("鸭梨",2999);
- list.add(phone3);
- GetPhone(list);
- }
- public static void GetPhone(ArrayList
list) { - int sum=0;
- for (int i = 0; i < list.size(); i++) {
- sum+=list.get(i).getPrice();
- }
- for (int i = 0; i < list.size(); i++) {
- if(list.get(i).getPrice()<=(sum/3)){
- System.out.println(list.get(i).getBrand()+" "+list.get(i).getPrice());
- }
- }
- }
- }
ArrayListPhone 的动态数组 list,用于存储手机对象。
Phone 类:假设 Phone 类有两个属性,品牌 (brand) 和价格 (price),并且具有相应的构造函数和获取方法(如 getBrand() 和 getPrice())。
主函数 main:在 main 函数中,创建了三个不同品牌和价格的手机对象,并将它们依次添加到 list 中。然后调用了 GetPhone(list) 方法。
GetPhone 方法:
sum。list,检查每个手机的价格是否小于等于 sum 的三分之一。