🏷️【Java】集合初步了解
目录
前提:
为什么要学集合❓❓Java集合类是Java数据结构的实现,它们允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类位于java.util包中,是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。这些集合类可以存放多个对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题。例如,List和Set是两种常见的集合类型,List的特点是插入有序的,元素可以重复;而Set的特点是插入无序的,元素不可重复。学习Java集合实际上就是为了方便操作多个对象,Java提供了一系列的API方法供我们去操作,如添加、删除、查找等操作,从而提升程序的运行效率和质量12。
♦️集合和数组的区别
长度区别
数组长度固定,定义长了造成内存空间的浪费,定义短了不够用。
集合大小可以变,用多少空间拿多少空间。
内容区别
数组可以存储基本数据类型和引用数据类型
集合中能存储引用数据类型(存储的为对象的内存地址)
元素区别
数组中只能存储同一种类型成员
集合中可以存储不同类型数据(一般情况下也只存储同一种类型的数据)
♦️集合的成员方法(ArrayList)
📍增:boolean add
boolean add(E e) //添加元素,返回值表示是否添加成功
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { //1.创建一个集合 ArrayList<String>list=new ArrayList<>(); //添加元素 boolean result= list.add("aaa"); System.out.println(result); //用result来判断元素是否添加成功,再将集合打印 System.out.println(list); } }
📍删:boolean remove
boolean remove(E e) //删除指定元素,返回值表示删除成功 E remove(int index) //删除指定索引元素,返回被删除元素
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { //1.创建一个集合 ArrayList<String>list=new ArrayList<>(); //添加元素 list.add("aaa"); list.add("bbb"); list.add("ccc"); System.out.println(list); //删除指定元素,返回删除结果 boolean result1=list.remove("bbb"); System.out.println(result1); System.out.println(list); } }
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { //1.创建一个集合 ArrayList<String>list=new ArrayList<>(); //添加元素 list.add("aaa"); list.add("bbb"); list.add("ccc"); System.out.println(list); //删除指定索引元素,返回被删除的元素 String result=list.remove(1);//注意返回值时字符串 System.out.println(result); System.out.println(list); } }
📍改:E set()
E set(int index,E e) //修改指定索引下的元素,返回原来的元素
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { //1.创建一个集合 ArrayList<String>list=new ArrayList<>(); //添加元素 list.add("aaa"); list.add("bbb"); list.add("ccc"); System.out.println(list); //修改指定索引元素 list.set(1,"ddd"); System.out.println(list); } }
📍查:E get()
E get(int index) //获取指定索引的元素
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { //1.创建一个集合 ArrayList<String>list=new ArrayList<>(); //添加元素 list.add("aaa"); list.add("bbb"); list.add("ccc"); System.out.println(list); //获得指定索引元素 String result=list.get(1); System.out.println(result); } }
📍求集合长度:int size()
int size() //集合的长度,也就是集合中元素的个数
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { //1.创建一个集合 ArrayList<String>list=new ArrayList<>(); //添加元素 list.add("aaa"); list.add("bbb"); list.add("ccc"); System.out.println(list); //获得集合长度 int size=list.size(); System.out.println(size); } }
♦️集合的综合训练
📍集合的遍历
需求:
定义一个集合,添加字符串,并进行遍历遍历格式参照:[元素1,元素2,元素3]。
分析:
- 定义一个集合:new
- 添加字符串,即说明添加元素为String类:add
- 遍历集合:int size
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//创建一个集合
ArrayList<String>list=new ArrayList<>();
//添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list);
//遍历集合
for (int i = 0; i < list.size(); i++)
{
String result= list.get(i);//根据索引不断遍历集合中元素
System.out.println(result);
}
}
}
📍添加学生对象并遍历
需求:
定义一个集合,添加一些学生对象,并进行遍历学生类的属性为:姓名,年龄。
分析:
- 定义一个集合
- 添加学生类,属性有姓名,年龄
- 遍历学生类
import java.util.ArrayList;
import java.util.Scanner;
class Student
{
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 Main {
public static void main(String[] args) {
//创建一个集合
ArrayList<Student>list=new ArrayList<>();//注意集合的类型
Scanner sc = new Scanner(System.in);
for (int n = 0; n < 3; n++) {
//键盘录入学生信息
Student s=new Student();
System.out.println("请输入学生姓名");
String name=sc.nextLine();
System.out.println("请输入学生年龄");
int age=sc.nextInt();
sc.nextLine();//让循环继续
//把name和age添加到学生类
s.setAge(age);
s.setName(name);
//把学生类添加到集合中
list.add(s);
}
//遍历集合
for (int i = 0; i < list.size(); i++)
{
Student stu= list.get(i);//根据索引不断遍历集合中元素
System.out.println(stu.getName()+","+stu.getAge());//注意:若直接打印stu,结果是地址值
}
}
}
📍添加用户对象并判断是否存在
需求:
main方法中定义一个集合,存入三个用户对象用户属性为:id,username,password
要求:定义一个方法,根据id查找对应的用户信息。如果存在,返回true
如果不存在,返回false分析:
- 定义一个方法,用于查找对应的用户信息
- 定义一个集合,存入用户属性
- 定义一个用户类
import java.util.ArrayList;
import java.util.Scanner;
//定义一个用户类
class User {
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;
}
}
public class Main {
public static void main(String[] args) {
//创建一个集合
ArrayList<User> list = new ArrayList<>();//注意集合的类型
Scanner sc = new Scanner(System.in);
for (int n = 0; n < 3; n++) {
//键盘录入用户信息
User s = new User();
System.out.println("请输入用户id");
String id = sc.nextLine();
System.out.println("请输入用户昵称");
String username = sc.nextLine();
System.out.println("请输入用户密码");
String password = sc.nextLine();
//把name和age添加到学生类
s.setId(id);
s.setUsername(username);
s.setPassword(password);
//把用户类添加到集合中
list.add(s);
}
//遍历集合
for (int i = 0; i < list.size(); i++) {
User stu = list.get(i);//根据索引不断遍历集合中元素
System.out.println(stu.getId() + "," + stu.getUsername() + "," + stu.getPassword());//注意:若直接打印stu,结果是地址值
}
//查询用户
System.out.print("请输入要查询的用户id: ");
String queryId = sc.nextLine();
boolean exists = resver(list, queryId);//判断要查找的用户是否存在
if (exists) {
System.out.println("用户ID " + queryId + " 存在。");
} else {
System.out.println("用户ID " + queryId + " 不存在。");
}
}
public static boolean resver(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 true;
}
}
return false;//循环结束,未找到
}
}
📍添加手机对象并返回要求的数据
需求:
定义Javabean类:Phone
Phone属性:品牌,价格。main方法中定义一个集合,存入三个手机对象。分别为:小米,1000。苹果,8000。锤子2999定义一个方法,将价格低于3000的手机信息返回。分析:
- 定义一个Phone类
- 定义一个集合,存入手机对象
- 定义一个方法,将价格低于3000的手机信息返回
import java.util.ArrayList;
import java.util.Scanner;
class Phone {
private String p;
private int price;
public Phone(){}
public Phone(String p,int price) {
this.p = p;
this.price=price;
}
public String getP() {
return p;
}
public void setP(String p) {
this.p = p;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
public class Main {
public static void main(String[] args) {
//创建一个集合
ArrayList<Phone> list = new ArrayList<>();//注意集合的类型
Phone p1=new Phone("小米",1000);
Phone p2=new Phone("苹果",3000);
Phone p3=new Phone("鸭梨",6000);
//将对象信息添加到集合中
list.add(p1);
list.add(p2);
list.add(p3);
//调用方法
LessPrice(list);
}
public static void LessPrice(ArrayList<Phone>list)
{
for (int i = 0; i < list.size(); i++) {
Phone ph=list.get(i);
int pprice=ph.getPrice();//定义对象接受集合中的价格
if(pprice>3000)
{
System.out.println(ph.getP()+","+ph.getPrice());
}
}
}
}
♦️拓展:
ArrayList属于泛型类<E>
泛型的好处包括:
避免多次进行强制类型转换:集合取出对象类型值时,会自动转为0biect类,需要强转回来
才能正常使用,泛型可以避免这一点。·将运行时异常提前成编译异常:提高代码的安全性和稳定性。总的来说,泛型是Java语言中的一种重要特性,它提供了编译时类型安全检测机制,使得代码更加安全、简洁和易于维护