集合的基本使用
文章目录
为什么要有集合
根据以往所学,如果我们想要同时存储多个元素,可以用数组实现,但是数组有弊端。数组的长度是固定的,一旦创建就不能发生变化。集合也可说为一个容器,也可存储多个数据,且长度可以发生变化。当我们创建一个集合时,长度为0。当我们添加第一个元素时,集合长度自动扩容为1,并以此类推。
集合存储数据类型的特点
**数组:**可以存基本数据类型,也可以存引用数据类型。
**集合:**可以存引用数据类型,但不能直接存基本数据类型。如果要存基本数据类型需要通过包装类实现。
集合和数组的对比
长度
数组:长度固定。
集合:自动收缩,可长可短。
存储类型
数组:可以存基本数据类型。也可以存引用数据类型。
集合:可以存引用数据类型,如果要存基本数据类型,要把它们变成对应的包装类。
集合
java中规定了很多集合,以下介绍常用集合ArrayList
package com.example.listdemo;
import java.util.ArrayList;
public class ArrayListDemo1{
public static void main(String[] args){
//1.创建集合对象
//泛型:限定集合中存储数据的类型
//JDK7以前的写法:ArrayList<String> list = new ArrayList<String>();
//JDK7以后:
ArrayList<String> list = new ArrayList<>();
/**以上创建的是ArrayList对象,而ArrayList是Java已经写好的一个类。这个类在底层做了些处理。打印对象不是地址值,而是集合中存储数据内容。在展示的时候会拿[]把所有的数据进行包裹**/
}
}
ArrayList成员方法
)
package com.example.demo;
import java.util.ArrayList;
/**
* boolean add(E e) 添加
*
* bollean remove(E e) 删除
* E remove(int index)
*
* E set(int index,E e) 修改
*
* E get(int index) 查询
* int size() 获取长度
*/
public class ArrayListDemo2 {
public static void main(String[] args) {
// 1.创建一个集合
ArrayList<String> list = new ArrayList<>();
// 2.添加元素
// 添加成功默认返回一个true
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("aaa");
// 3.删除元素
/* boolean result1 = list.remove("aaa");
System.out.println(result1);
boolean result2 = list.remove("bbb");
System.out.println(result2);
// 将被删除的元素进行返回
String str = list.remove(0);
System.out.println(str);*/
// 4.修改元素
// 将被覆盖的值进行返回也就是原来的旧值
/*String result = list.set(0,"bbb");
System.out.println(result);*/
// 5.查询元素
String s = list.get(0);
System.out.println(s);
//6.遍历
for (int i = 0; i < list.size(); i++) {
// i 索引
// list.get(i)元素
String str = list.get(i);
System.out.println(str);
}
}
}
综合练习
练习1——集合的遍历
需求:定义一个集合,添加字符串,并进行遍历。
遍历格式参照:[元素1,元素2,元素3]
package com.example.demo;
import java.util.ArrayList;
import java.util.StringJoiner;
public class Test {
public static void main(String[] args) {
// 1.创建一个集合对象和一个StringJoiner对象
ArrayList<String> list = new ArrayList<>();
StringJoiner str = new StringJoiner(",","[","]");
// 2.添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
// 3.遍历
for (int i = 0; i < list.size(); i++) {
str.add(list.get(i));
}
// 4.打印
System.out.println(str);
}
}
练习2——添加数字并遍历
需求:定义一个集合,添加数字,并进行遍历。
遍历格式参照:[元素1,元素2,元素3]
package com.example.demo;
import java.util.ArrayList;
import java.util.StringJoiner;
public class Test {
public static void main(String[] args) {
// 1.创建一个集合对象和一个StringJoiner对象
ArrayList<Integer> list = new ArrayList<>();
StringJoiner str = new StringJoiner(",","[","]");
// 2.添加元素
// JDK5以后int Integer之间是可以互相转换的
list.add(1);
list.add(2);
list.add(3);
// 3.遍历
for (int i = 0; i < list.size(); i++) {
str.add(list.get(i).toString());
}
// 4.打印
System.out.println(str);
}
}
练习3——添加学生对象并遍历
需求:定义一个集合,添加一些学生对象,并进行遍历。
学生的属性为:姓名,年龄。
package com.example.demo;
public class Student {
// 1.私有化成员变量
private String name;
private Integer age;
// 2.空参构造方法
public Student() {
}
// 3.带全部参数的构造方法
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
// 4.get/set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
package com.example.demo;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
// 1.创建一个集合对象
ArrayList<Student> list = new ArrayList<>();
// 2.创建学生对象
Student stu = new Student("张三",21);
Student stu1 = new Student("李四",22);
Student stu2 = new Student("王五",23);
// 3.添加对象
list.add(stu);
list.add(stu1);
list.add(stu2);
// 3.遍历
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
//4.打印
System.out.println(student.getName()+","+student.getAge());
}
}
}
练习3——添加学生对象并遍历Plus
**需求:**定义一个集合,添加一些学生对象,并进行遍历。
学生类的属性为:姓名,年龄
要求:对象的数据来自键盘录入。
package com.example.demo;
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// 1.创建一个集合对象
ArrayList<Student> list = new ArrayList<>();
// 2.键盘录入
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入学生姓名:");
String name = scanner.next();
System.out.println("请输入学生年龄:");
Integer age = scanner.nextInt();
// 3.创建学生对象
Student stu = new Student();
// 4.赋值
stu.setName(name);
stu.setAge(age);
// 5.添加对象
list.add(stu);
}
// 6.遍历
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
//7.打印
System.out.println(student.getName()+","+student.getAge());
}
}
}
练习4——添加用户对象并判断是否存在
需求:
- main方法中定义一个集合,存入三个用户对象。用户属性为:id,username,password。
要求:定义一个方法,根据id查找对应的用户信息。
- 如果存在,返回true
- 如果不存在,返回false
package com.example.demo;
public class User {
// 1.私有化成员变量
private Integer id;
private String userName;
private String passWord;
// 2.空参构造
public User() {
}
// 3.带全部参数的构造方法
public User(Integer id, String userName, String passWord) {
this.id = id;
this.userName = userName;
this.passWord = passWord;
}
// get/set方法
public Integer getId() {
return id;
}
public void setId(Integer 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 com.example.demo;
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// 1.创建一个集合对象
ArrayList<User> list = new ArrayList<>();
// 2.键盘录入
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户id:");
int id = scanner.nextInt();
System.out.println("请输入用户名:");
String username = scanner.next();
System.out.println("请输入用户密码:");
String password = scanner.next();
// 3.创建用户对象
User user = new User();
// 4.赋值
user.setId(id);
user.setUserName(username);
user.setPassWord(password);
// 5.添加对象
list.add(user);
}
System.out.println("请输入要查询的id:");
int id = scanner.nextInt();
boolean result = isNull(list,id);
System.out.println(result);
}
public static boolean isNull(ArrayList<User> list,int id){
for (int i = 0; i < list.size(); i++) {
boolean result = list.get(i).getId().equals(id);
if (result){
return true;
}
}
return false;
}
}
练习5——添加手机对象并返回要求的数据
需求:定义一个JavaBean类:phone
phone属性:品牌,价格。
main方法中定义一个集合,存入三个手机对象
分别为:小米,1000.苹果,8000.锤子,2999.
定义一个方法,将价格低于3000的手机信息返回。
package com.example.demo;
public class Phone {
// 1.私有化成员变量
private String brand;
private Integer price;
// 2.空参构造方法
public Phone() {
}
// 3.带有全部参数的构造方法
public Phone(String brand, Integer price) {
this.brand = brand;
this.price = price;
}
// 4.get/set方法
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
}
package com.example.demo;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
// 1.创建一个集合对象
ArrayList<Phone> list = new ArrayList<>();
// 2.创建对象
Phone phone = new Phone("小米",1000);
Phone phone1 = new Phone("苹果",8000);
Phone phone2 = new Phone("锤子",2999);
// 3.添加元素
list.add(phone);
list.add(phone1);
list.add(phone2);
// 5.调用方法
ArrayList<Phone> result = getPhoneInfo(list);
// 6.打印
for (int i = 0; i < result.size(); i++) {
Phone phone3 = result.get(i);
System.out.println(phone3.getBrand()+","+phone3.getPrice());
}
}
// 4.定义一个方法,将价格低于3000的手机信息返回
// 如果我们要返回多个数据,可以把这些数据先放到一个容器当中(集合,数组)
public static ArrayList getPhoneInfo(ArrayList<Phone> list){
ArrayList<Phone> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
int price = list.get(i).getPrice();
if (price < 3000){
Phone phone = list.get(i);
result.add(phone);
}
}
return result;
}
}
}
}
// 4.定义一个方法,将价格低于3000的手机信息返回
// 如果我们要返回多个数据,可以把这些数据先放到一个容器当中(集合,数组)
public static ArrayList getPhoneInfo(ArrayList<Phone> list){
ArrayList<Phone> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
int price = list.get(i).getPrice();
if (price < 3000){
Phone phone = list.get(i);
result.add(phone);
}
}
return result;
}
}