什么是集合
我们来举个例子:
如果我们想同时存储多个元素,我们该怎么办呢?那简单呀,我用数组不就可以了吗?
那我再来举个例子:
如果你喜欢了三个小姐姐,突然间有一天又喜欢上了一位,你还能装的下吗?数组是不是有弊端呀!数组是不是创建完就固定了呢,大小固定了呀。
当然那必须是有的,那就是集合!集合也是和数组一样是一种容器,而且大小是可以自动扩容的哟。
-
数组与集合长度区别:
- 数组
- 数组长度固定,不可变
- 集合
- 集合长度自动扩容,添加一个元素自动+1,删除一个元素自动-1.
- 数组
-
数组与集合存储区别:
- 数组
- 可以存基本数据类型
- 可以存引用数据类型
- 集合
- 可以存引用数据类型
- 不可以直接存基本数据类型,需要变成包装类才可以存储
- 数组
那下面我们来学习一下集合吧!
ArrayList
创建集合对象:ArrayList<String> list = new ArrayList<>();
我们来打印看一下:
什么都没有?这是为什么呢?
其实我们创建的是ArrayList的对象,而ArrayList是Java已经写好的一个类 在展示的时候会拿[]把所有的数据进行包裹
打印对象不是地址值,而是集合存储的数据内容
好啦,我们知道怎么创建了,那怎么给他添加数据呢?下面我们来看一下他的成员方法都有哪些吧!
ArrayList成员方法
| 方法名 | 说明 |
|---|---|
| boolean add(E e) | 添加元素,返回值表示是否添加成功 |
| boolean remove(E e) | 删除指定元素,返回值表示是否删除成功 |
| E remove(int index) | 删除指定索引的元素,返回被删除元素 |
| E set(int index,E e | 修改指定索引下的元素,返回原来元素 |
| E get(int index) | 获取指定索引的元素 |
| int size() | 集合的长度,集合中元素的个数 |
统称四个字:增、删、改、查。
下面我们来实操一下吧:
- 添加元素:
list.add("张三");
- 删除元素:
list.remove("王五");
- 根据索引删除元素,并返回删除元素:
String remove = list.remove(0);
System.out.println(remove);
- 根据索引修改元素:
list.set(0,"张四");
- 根据索引查找元素:
String s = list.get(0);
System.out.println(s);
- 遍历集合元素:
for (int i = 0; i < list.size(); i++) {
// list.get(i) 集合的每一个元素
String str = list.get(i);
System.out.println(str);
}
好啦,以上就是集合的基本操作啦。那有的人就会问了,我如果要添加基本数据类型怎么办呢?是不是要变成对应的包装类才可以呀!
基本数据类型包装类
那下面我们就来了解一下基本数据类型对应的包装类吧:
| 类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
这些基本数据类型是不是把首字母大写就是对应的包装类了呀,我们下面来说一下特殊的两个:
| 类型 | 包装类 |
|---|---|
| char | Character |
| int | Integer |
我们需要记住这两个是特殊的,其他的知道大写就可以啦!我们下面来实操一下吧:
- 整数型
第一步:创建整数集合
// 1.创建整数集合
ArrayList<Integer> list1 = new ArrayList<>();
第二步:添加集合元素
// 2.添加元素
list1.add(10);
list1.add(20);
list1.add(30);
第三步:遍历集合元素
// 3.遍历集合
System.out.print("[");
for (int i = 0; i < list1.size(); i++) {
if(i == list1.size() -1){
System.out.print(list1.get(i));
}else{
System.out.print(list1.get(i) + ",");
}
}
System.out.println("]");
- 字符型
第一步:创建字符集合
// 1.创建字符集合
ArrayList<Character> list2 = new ArrayList<>();
第二步:添加集合元素
// 2.添加元素
list2.add('a');
list2.add('b');
list2.add('c');
第三步:遍历集合元素
// 3.遍历集合
System.out.print("[");
for (int i = 0; i < list2.size(); i++) {
if(i == list2.size() -1){
System.out.print(list2.get(i));
}else{
System.out.print(list2.get(i) + ",");
}
}
System.out.println("]");
怎么样,是不是都一样的呀。好啦,以上就是基本类型的添加元素并遍历元素啦。我们下面来看几道案例吧:
集合案例练习
添加学生对象并遍历
需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名,年龄。
要求:对象的数据由键盘输
第一步:创建学生属性
private String name;
private int sge;
第二步:创建学生的集合对象
// 1.创建学生集合
ArrayList<Student> list = new ArrayList<>();
第三步:键盘录入学生信息
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
Student stu = new Student();
// 2.1由键盘输入信息
System.out.println("请输入第" + (i + 1) +"学生姓名:");
String name = sc.next();
System.out.println("请输入第" + (i + 1) +"学生年龄:");
int age = sc.nextInt();
}
第四步:把添加到的值赋值给学生对象
// 2.2把name和age赋值给学生对象
stu.setName(name);
stu.setSge(age);
第五步:把学生对象添加进集合当中。
// 2.3 把学生对象添加进集合当中
list.add(stu);
第六步:遍历集合元素
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
// System.out.println(student); // 输出地址值 demo11.Student@16b98e56
// 如果我们自定义的类需要打印值需要用到get方法
System.out.println("姓名:" + stu.getName() + "," + "年龄:" + stu.getSge());
}
我们来运行看一下吧:
完整代码:
public static void main(String[] args) {
// 1.创建学生集合
ArrayList<Student> list = new ArrayList<>();
// 2.键盘录入学生的信息并添加到集合当中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
Student stu = new Student();
// 2.1由键盘输入信息
System.out.println("请输入第" + (i + 1) +"学生姓名:");
String name = sc.next();
System.out.println("请输入第" + (i + 1) +"学生年龄:");
int age = sc.nextInt();
// 2.2把name和age赋值给学生对象
stu.setName(name);
stu.setSge(age);
// 2.3 把学生对象添加进集合当中
list.add(stu);
}
// 3. 遍历集合元素
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
// System.out.println(student); // 输出地址值 demo11.Student@16b98e56
// 如果我们自定义的类需要打印值需要用到get方法
System.out.println("姓名:" + stu.getName() + "," + "年龄:" + stu.getSge());
}
}
添加用户对象并判断是否存在
需求:1在main方法中定义一个集合,存入三个对象,用户属性为id,username,password。
2.定义一个方法,根据id查找对应的用户信息。如果存在就返回true,不存在就返回false。并返回对应的索引
第一步:创建用户对象的属性
private String id;
private String name;
private String password;
第二步:创建用户集合和添加到集合里面
// 1.定义用户集合
ArrayList<User> list = new ArrayList<>();
// 2.创建用户三个对象
User u1 = new User("zhangsan01","张三","123");
User u2 = new User("lisi02","李四","123");
User u3 = new User("wangwu03","王五","123");
// 3.把对象添加进集合中。
list.add(u1);
list.add(u2);
list.add(u3);
第三步:定义方法用来判断id是否存在
public static boolean userId(ArrayList<User>list,String id){
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
String uid = user.getId();
if(uid.equals(id)){
// 如果找到了,直接返回true
return true;
}
}
return false;
}
第四步:定义方法用来查找对应的索引
public static int getIndex(ArrayList<User> list,String id){
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
String uid = user.getId();
if(uid.equals(id)){
// 如果找到了,直接返回true
return i;
}
}
return -1;
}
第五步:调用方法查看id是否存在以及对应的索引
// 4.调用方法查看id是否存在
boolean flag = userId(list, "lisi02");
int index = getIndex(list, "lisi02");
System.out.println("是否存在:" + flag + "对应的索引是" + index);
我们来运行看看一下吧:
完整代码:
public static void main(String[] args) {
// 1.定义用户集合
ArrayList<User> list = new ArrayList<>();
// 2.创建用户三个对象
User u1 = new User("zhangsan01","张三","123");
User u2 = new User("lisi02","李四","123");
User u3 = new User("wangwu03","王五","123");
// 3.把对象添加进集合中。
list.add(u1);
list.add(u2);
list.add(u3);
// 4.调用方法查看id是否存在
boolean flag = userId(list, "lisi02");
int index = getIndex(list, "lisi02");
System.out.println("是否存在:" + flag + "对应的索引是" + index);
}
// 4.定义方法用来判断查找id是否存在
public static boolean userId(ArrayList<User>list,String id){
// for (int i = 0; i < list.size(); i++) {
// User user = list.get(i);
// String uid = user.getId();
// if(uid.equals(id)){
// // 如果找到了,直接返回true
// return true;
// }
// }
// return false;
return getIndex(list,id) >= 0;
}
// 5.定义方法用来查找对应的索引
public static int getIndex(ArrayList<User> list,String id){
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
String uid = user.getId();
if(uid.equals(id)){
// 如果找到了,直接返回true
return i;
}
}
return -1;
}
添加手机对象并返回要求的数据
需求:定义javabean类:phone。phone属性:品牌,价格。 main方法中定义一个集合,存入3个手机对象。分别为小米1000。苹果8000.锤子2999.
定义一个方法,将价格低于3000的手机信息返回
第一步:定义手机对象属性
private String brand;
private double price;
第二步:创建手机集合并创建对象添加到集合里面
// 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);
第三步:定义方法用来遍历集合获取低于3000的手机
public static ArrayList<Phone> phoneInfo(ArrayList<Phone> list){
// 定义一个集合用来存储价格低于3000的手机对象
ArrayList<Phone> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Phone p = list.get(i);
double price = p.getPrice();
// 判断当前手机价格低于3000的就把手机对象添加到容器中
if(price < 3000){
result.add(p);
}
}
return result;
}
第五步:调用方法并遍历返回的集合元素
// 5.调用方法
ArrayList<Phone> phonelist = phoneInfo(list);
// 6.遍历返回的集合元素
for (int i = 0; i < phonelist.size(); i++) {
Phone phone = phonelist.get(i);
System.out.println("手机信息:" + phone.getBrand() + " 手机价格:" + phone.getPrice());
}
我们来运行看一下吧:
完整代码:
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);
// 5.调用方法
ArrayList<Phone> phonelist = phoneInfo(list);
// 6.遍历返回的集合元素
for (int i = 0; i < phonelist.size(); i++) {
Phone phone = phonelist.get(i);
System.out.println("手机信息:" + phone.getBrand() + " 手机价格:" + phone.getPrice());
}
}
// 4.定义方法用来查找手机对象
// 如果我们要返回多个数据,可以把这些数据先放到一个容器中,再把容器返回。
public static ArrayList<Phone> phoneInfo(ArrayList<Phone> list){
// 定义一个集合用来存储价格低于3000的手机对象
ArrayList<Phone> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Phone p = list.get(i);
double price = p.getPrice();
// 判断当前手机价格低于3000的就把手机对象添加到容器中
if(price < 3000){
result.add(p);
}
}
return result;
}
好啦,以上就是一些常用的集合增删改查以及练习案例,有什么不懂的可以在评论区评论,我们下期不见不散哟!
==最后非常感谢您的阅读,也希望能得到您的反馈 ==