一、集合与数组的区别
1、长度
数组的长度是不可变的
集合的长度是可变的
2、存储的数据类型
数组存储的数据类型可以是基本数据类型也可以是引用数据类型
集合存储的数据类型只能是引用数据类型,如果想要存储基本数据类型则需要变成对应的包装类
class Person{String name;int age;void show(){System.out.println("人类");}
}public class 数组与集合 {public static void main(String[] args) {// 存储基本数据类型int [] arr={1,2,3};// 存储引用数据类型Person [] arr_person=new Person[3];Person p1=new Person();Person p2=new Person();Person p3=new Person();arr_person[0]=p1;arr_person[1]=p2;arr_person[2]=p3;}
}
二、集合的创建
语法:ArrayList<存放的数据类型> list=new ArrayList<>();
其中<存放的数据类型>也称之为泛型,用来限定集合存储数据的类型
public class 集合的创建 {public static void main(String[] args) {// 创建集合的对象// 泛型:限定集合存储数据的类型 e.g:<String>// 打印容器变量 输出的不是该容器的地址值 而是容器中存放的数据内容ArrayList<String> list=new ArrayList<>();System.out.println(list);}
}
三、集合的成员方法
以添加字符串为例
1、增
语法:集合名称.add(元素);
其返回值是true 表示添加成功(且返回值永远是true)
import java.util.ArrayList;public class 集合的创建 {public static void main(String[] args) {// 创建集合的对象// 泛型:限定集合存储数据的类型 e.g:<String>// 打印容器变量 输出的不是该容器的地址值 而是容器中存放的数据内容ArrayList<String> list=new ArrayList<>();// 容器名称.add() 添加元素// 返回值为trueboolean result=list.add("你好");System.out.println(result);// 输出:trueSystem.out.println(list);// 输出:[你好]}
}
2、删
语法1:集合名称.remove(元素); 根据元素删除
其返回值是true 表示删除成功 返回值是false 表示删除失败(当容器中没有该元素时 就会删除失败)
import java.util.ArrayList;public class 集合的创建 {public static void main(String[] args) {// 创建集合的对象// 泛型:限定集合存储数据的类型 e.g:<String>// 打印容器变量 输出的不是该容器的地址值 而是容器中存放的数据内容ArrayList<String> list=new ArrayList<>();// 容器名称.add() 添加元素// 返回值为truelist.add("你好");list.add("世界");list.add("皮卡丘");// 容器名称.remove(元素) 删除元素// 删除存在的元素boolean result1=list.remove("你好");System.out.println(result1);// 输出:trueSystem.out.println(list);// 输出:[世界, 皮卡丘]// 删除不存在的元素boolean result2=list.remove("pkq");System.out.println(result2);// 输出:falseSystem.out.println(list);// 输出:[世界, 皮卡丘]}
}
语法2:集合名称.remove(索引); 根据索引删除
其返回值是被删除的元素
import java.util.ArrayList;public class 集合的创建 {public static void main(String[] args) {// 创建集合的对象// 泛型:限定集合存储数据的类型 e.g:<String>// 打印容器变量 输出的不是该容器的地址值 而是容器中存放的数据内容ArrayList<String> list=new ArrayList<>();// 容器名称.add() 添加元素// 返回值为truelist.add("你好");list.add("世界");list.add("皮卡丘");// 容器名称.remove(索引)// 返回删除的元素String result1=list.remove(1);System.out.println(result1);// 输出:世界System.out.println(list);// 输出:[你好, 皮卡丘]}
}
3、改
语法:集合名称.set(索引,修改后元素);
修改指定索引下的元素使其变成修改后的元素,返回值为原来的元素
import java.util.ArrayList;public class 集合的创建 {public static void main(String[] args) {// 创建集合的对象// 泛型:限定集合存储数据的类型 e.g:<String>// 打印容器变量 输出的不是该容器的地址值 而是容器中存放的数据内容ArrayList<String> list=new ArrayList<>();// 容器名称.add() 添加元素// 返回值为truelist.add("你好");list.add("世界");list.add("皮卡丘");// 容器名称.set(索引,元素);// 返回修改前的元素String str=list.set(1,"java");System.out.println(str);//输出: 世界System.out.println(list);//输出: [你好, java, 皮卡丘]}
}
4、查
语法1:集合名称.get(索引);
获取指定索引下的元素
import java.util.ArrayList;public class 集合的创建 {public static void main(String[] args) {// 创建集合的对象// 泛型:限定集合存储数据的类型 e.g:<String>// 打印容器变量 输出的不是该容器的地址值 而是容器中存放的数据内容ArrayList<String> list=new ArrayList<>();// 容器名称.add() 添加元素// 返回值为truelist.add("你好");list.add("世界");list.add("皮卡丘");// 容器名称.get(索引);// 返回指定索引下的元素String str=list.get(0);System.out.println(str);//输出: 你好System.out.println(list);//输出: [你好, 世界, 皮卡丘]}
}
语法2:集合名称.size;
获取集合的长度
import java.util.ArrayList;public class 集合的创建 {public static void main(String[] args) {// 创建集合的对象// 泛型:限定集合存储数据的类型 e.g:<String>// 打印容器变量 输出的不是该容器的地址值 而是容器中存放的数据内容ArrayList<String> list=new ArrayList<>();// 容器名称.add() 添加元素// 返回值为truelist.add("你好");list.add("世界");list.add("皮卡丘");// 容器名称.size()// 返回集合的长度int size=list.size();System.out.println(size);// 输出:3}
}
遍历集合元素
public class 集合的创建 {public static void main(String[] args) {// 创建集合的对象// 泛型:限定集合存储数据的类型 e.g:<String>// 打印容器变量 输出的不是该容器的地址值 而是容器中存放的数据内容ArrayList<String> list=new ArrayList<>();// 容器名称.add() 添加元素// 返回值为truelist.add("你好");list.add("世界");list.add("皮卡丘");// 遍历数组元素// 输入list.fori即可for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}// 输出:// 你好// 世界// 皮卡丘}
}
四、集合添加基本数据类型
集合添加基本数据类型需要将基本数据类型转化为对应的包装类
import java.util.ArrayList;public class 集合添加基本数据类型 {public static void main(String[] args) {// jdk5以后int和Integer可以相互转化// 1.创建容器ArrayList<Integer> list1=new ArrayList<>();// 2.添加元素list1.add(1);list1.add(2);list1.add(3);list1.add(4);System.out.println(list1);// 输出:[1, 2, 3, 4]// 3.修改元素// 返回修改前的元素int result1=list1.set(1,5);System.out.println(result1);// 输出:2System.out.println(list1);// 输出:[1, 5, 3, 4]// 4.删除元素// 根据索引删除 返回值为删除的元素int result2=list1.remove(1);System.out.println(result2);// 输出:5System.out.println(list1);// 输出:[1, 3, 4]// 根据元素删除 返回值为true、false// 如果你想要按值删除元素,你需要遍历列表并找到该值的索引,然后调用 remove(int index) 方法。// 或者,你可以使用 removeIf(i->i==要删除的元素) 方法(从 Java 8 开始提供),该方法允许你基于条件删除元素。boolean result3=list1.removeIf(i -> i == 4);System.out.println(result3);// 输出:trueSystem.out.println(list1);// 输出:[1, 3]// 5.查找元素// 不能像集合一样 按照索引查找元素 e.g:list1[i]是错误的 必须是list1.get(索引值)System.out.println(list1.get(1));// 输出:3for (int i = 0; i < list1.size(); i++) {System.out.print(list1.get(i)+" ");}// 输出:1 3// 1.创建容器ArrayList<Character> list2=new ArrayList<>();// 2.添加元素list2.add('a');list2.add('b');list2.add('c');list2.add('d');System.out.println(list2);// 输出:[a, b, c, d]// 3.修改元素// 返回修改前的元素值char r1=list2.set(1,'e');System.out.println(r1);// 输出:bSystem.out.println(list2);// 输出:[a, e, c, d]// 4.删除元素// 按索引删除元素 返回返回的元素char r2=list2.remove(1);System.out.println(r2);// 输出:eSystem.out.println(list2);// 输出:[a, c, d]// 按元素删除元素 返回true、falseboolean r3=list2.removeIf(i->i=='c');System.out.println(r3);// 输出:trueSystem.out.println(list2);// 输出:[a, d]// 5.查找元素char r4=list2.get(0);// 输出:aSystem.out.println(r4);for (int i = 0; i < list2.size(); i++) {System.out.print(list2.get(i)+" ");}// 输出:a d }
}
五、集合添加自定义类的对象
import java.util.ArrayList;
class Person{private String name;private int age;public Person() {}public Person(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 数组与集合 {public static void main(String[] args) {// 1.创建集合ArrayList<Person> list=new ArrayList<>();Person p1=new Person("皮卡丘",19);Person p2=new Person("星之卡比",20);Person p3=new Person("玉桂狗",18);Person p4=new Person("布丁狗",18);// 2.添加元素list.add(p1);list.add(p2);list.add(p3);System.out.println(list);// 输出结果:是对象的引用// [demo18_ArrayList.Person@3b07d329, demo18_ArrayList.Person@41629346, demo18_ArrayList.Person@404b9385]// 3.遍历元素for (int i = 0; i < list.size(); i++) {// list.get(i)是列表中第 i 个元素的引用。这个引用指向一个 Person 对象,而不是对象的内存地址System.out.println("学生姓名是:"+list.get(i).getName()+",学生姓名是:"+list.get(i).getAge());// 学生姓名是:皮卡丘,学生姓名是:19// 学生姓名是:星之卡比,学生姓名是:20// 学生姓名是:玉桂狗,学生姓名是:18}//4.修改元素 返回修改前的元素Person pp=list.set(1,p4);System.out.println(pp);//demo18_ArrayList.Person@41629346// 遍历元素for (int i = 0; i < list.size(); i++) {// list.get(i)是列表中第 i 个元素的引用。这个引用指向一个 Person 对象,而不是对象的内存地址System.out.println("学生姓名是:"+list.get(i).getName()+",学生姓名是:"+list.get(i).getAge());// 学生姓名是:皮卡丘,学生姓名是:19// 学生姓名是:布丁狗,学生姓名是:18// 学生姓名是:玉桂狗,学生姓名是:18}// 5.删除元素// 通过索引删除 返回删除的元素即该对象的引用Person p=list.remove(1);System.out.println(p);// 通过元素删除(元素是Person类) 返回true、falseboolean result=list.remove(p2); // demo18_ArrayList.Person@41629346System.out.println(result); // false// 遍历元素for (int i = 0; i < list.size(); i++) {// list.get(i)是列表中第 i 个元素的引用。这个引用指向一个 Person 对象,而不是对象的内存地址System.out.println("学生姓名是:"+list.get(i).getName()+",学生姓名是:"+list.get(i).getAge());// 学生姓名是:皮卡丘,学生姓名是:19// 学生姓名是:玉桂狗,学生姓名是:18}}
}
六、集合的作用
当方法需要返回多个数据时,我们可以将数据存放在容器中,返回容器即可(返回的容器要交代是什么类型)