JAVA基础 —— 集合

文章介绍了集合的概念,指出集合作为长度可变的容器类,优于固定长度的数组。重点讲解了ArrayList的成员方法,包括添加、删除、修改和查询元素。提供了基本数据类型与包装类的对应关系,并通过示例展示了集合的遍历和学生、用户、手机对象的添加及判断操作。
摘要由CSDN通过智能技术生成

目录

一、集合概述

1.  为什么要有集合?

2.  集合和数组的对比 

 二、 ArrayList

1.  ArrayList 成员方法

2.  基本数据类型对应包装类

三、综合练习

1.  集合的遍历方式

 2.   添加学生对象并遍历

3.  添加用户信息并判断是否存在

4.  添加手机对象并返回要求的数据


一、集合概述

集合类:面向对象类,对事物的描述都是通过对象实现。为方便对多个对象进行操作,必须对多个对象进行存储,因此需要容器类。容器类特点是长度可变。


1.  为什么要有集合?

如果我们想要同时存储多个元素,我们该怎么办?

  • 数组可以做 但是有弊端。
  • 数组的长度是固定不变的,数组创建完毕后,其其长度就不能再被改变。

所以,此时我们就要考虑有没有长度可变的容器呢?

因此,我们就引入了集合。(集合底层实现自动扩容。)

2.  集合和数组的对比 

长度存储类型
数组

可以存基本数据类型

可以存引用数据类型

集合

可以存引用数据类型

基本数据类型 —> 包装类

 二、 ArrayList

让我们打开API帮助文档搜索 ArrayList 显示: 

public static void main(String[] args) {
	//1.创建集合对象
	//泛型:限定集合中存储数据的类型
	//ArrayList<int> 会报错 因为集合不能直接存储基本数据类型
	//ArrayList<String>  list =new ArrayList<String>();
	//jdk7
	
	//此时,创建的是Arraylist对象,而ArrayList是写好的类
	//这个类在底层做了一些处理
	//打印对象不是地址值,而是集合中存储数据内容
	//在展示的时候会拿[]把所有的数据源进行包装
	ArrayList<String>  list =new ArrayList<>();
	System.out.println(list);  // []
}

1.  ArrayList 成员方法

方法名说明
boolean  add(String  element)添加元素,返回值表示是否添加成功
boolean  remove(String  element)删除指定元素,返回值表示是否删除成功
remove(int  index)删除指定索引的元素,返回被删除元素
set(int  index,String  element)修改指定索引下的元素,返回原来的元素
get(int  index)获取指定索引下的元素
int  size()集合的长度,也就是集合中元素的个数
public static void main(String[] args) {
	//1.创建一个集合对象
	ArrayList<String> list = new ArrayList<>();
	
	//2.添加元素
	boolean result = list.add("aaa");
	System.out.println(result);
	//add()不管添加什么都会添加成功
	list.add("aaa");
	list.add("bbb");
	list.add("ccc");
	System.out.println(list);
	
	//3.删除元素
	//集合索引规则与数组、字符串索引规则一样(从0开始)
	boolean result1 = list.remove("aaa");
	System.out.println(result1);
	System.out.println(list);
	boolean result2 = list.remove("ddd");
	System.out.println(result2);
	
	//4.根据索引删除元素
	String str = list.remove(0) ;
	System.out.println(str);
	
	//5.修改元素
	String str1 = list.set(1, "ddd");
	System.out.println(str1);  //被覆盖元素返回
	
	//6.查询元素
	String str2 = list.get(0);
	System.out.println(str2);
	
	//7.遍历集合
	for (int i = 0; i < list.size(); i++) {
		String str3 = list.get(i);
		System.out.println(str3);
	}
	
}

2.  基本数据类型对应包装类

byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

三、综合练习

1.  集合的遍历方式

需求:定义一个集合,添加字符串,并进行遍历遍历格式参照:[元素1,元素2,元素3]。

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.   添加学生对象并遍历

需求:定义一个集合,添加一些学生对象,并进行遍历
           学生类的属性为︰姓名,年龄。

要求:对象的数据来自键盘录入

//Student.java

public class Student {
    //标准JAVA Bean
	//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;
	}
	
}
StudentTest.java

public static void main(String[] args) {
		// 1.创建集合
		ArrayList<Student> list = new ArrayList<>();
		// 一开始创建 集合长度为0(集合长度是可变的)

		// 2.键盘录入学生信息并添加到集合中
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 3; i++) {
			Student stu = new Student();
			System.out.println("请输入学生姓名:");
			String name = sc.next();
			System.out.println("请输入学生年龄:");
			int age = sc.nextInt();

			// 把name和age添加到学生对象
			stu.setName(name);
			stu.setAge(age);

			list.add(stu);
		}

		// 4.遍历集合
		for (int i = 0; i < list.size(); i++) {
			Student stu = list.get(i);
			// 此时直接输出stu 获取的是地址值 要通过get方法获取变量值
			System.out.println(stu.getName() + "," + stu.getAge());
		}
	}

运行结果:


 思考:如果将Student stu = new Student() 放在循环外,结果还会是上图所示吗?

        Student stu = new Student();

		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 3; i++) {
			
			System.out.println("请输入学生姓名:");
			String name = sc.next();
			System.out.println("请输入学生年龄:");
			int age = sc.nextInt();

			stu.setName(name);
			stu.setAge(age);

			list.add(stu);
		}

运行结果:

 原因:没有创建新的学生对象,同一个对象被赋值不同的学生信息,后添加的学生信息会覆盖之前的学生信息,最后添加的学生信息会最终存在集合当中。

3.  添加用户信息并判断是否存在

需求:
1 , main方法中定义一个集合,存入三个用户对象。
                 用户属性为: id,username, password
2,要求:定义一个方法,根据id查找对应的用户信息。
                 如果存在,返回true
                 如果不存在,返回false

User.java

public 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;
	}

}
UserTest.java

public class UserTest {
	public static void main(String[] args) {
		// 1.创建集合
		ArrayList<User> list = new ArrayList<>();
		
		//2.创建三个用户对象
		User u1 = new User("user001","张三","123456");
		User u2 = new User("user002","李四","123456");
		User u3 = new User("user003","王五","123456");
				
		//3.用户信息添加到集合当中
		list.add(u1);
		list.add(u2);
		list.add(u3);
		
		//4.调用方法查看id是否存在
		int index =getIndex(list, "user001");
		boolean flag = contains(list, "user004");
		//5.输出结果
		System.out.println(index);  //0
		System.out.println(flag);   //flase
		
	}
	public static boolean contains(ArrayList<User> list,String id) {
		return getIndex(list, id)>=0;
	}
	
	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)) {
				//找到了返回true
				return i;
			}
		}
		//集合内所有元素都对比玩 都没有一样的
		return -1;
	}
}

4.  添加手机对象并返回要求的数据

需求:
         定义Javabean类: Phone

         Phone属性:品牌,价格。
         main方法中定义一个集合,存入三个手机对象。

         分别为:小米,1000。苹果,8000。锤子2999。

         定义一个方法,将价格低于3000的手机信息返回。

//Phone.java

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;
	}

}
//PhoneTest.java

public class PhoneTest {
	public static void main(String[] args) {
		//1.创建集合对象
		ArrayList<Phone> list= new ArrayList<>();
		
		//2.创建手机对象
		Phone p1 = new Phone("小米",1000);
		Phone p2 = new Phone("苹果",8000);
		Phone p3 = new Phone("华为",2999);
		
		//3.添加手机对象到集合当中
		list.add(p1);
		list.add(p2);
		list.add(p3);
		
		//4.调用方法
		ArrayList<Phone> phones = getPhoneInfo(list);
		
		//5. 遍历循环
		for (int i = 0; i < phones.size(); i++) {
			Phone p = phones.get(i);
			System.out.println(p.getBrand() +"," + p.getPrice());
		}
	}
	
	//技巧:
	//以后我们要返回多个数据,可以把这些数据先存放到一个容器中,再把容器返回
	//集合 数组
	public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list) {
		ArrayList<Phone> resultPhone = new ArrayList<>();
	for (int i = 0; i < list.size(); i++) {
		Phone p= list.get(i);
		int price = p.getPrice();
		if (price < 3000) {
			resultPhone.add(p);
		}
	}	
	return resultPhone;
	}
	
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hgngy.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值