集合的特性
数组的长度是固定的一旦创建好了之后,长度就不能发生变化啦,那能不能有一个容器她的长度是可变的呢?当然是有的,就是“集合”,集合就是一个容器,可以存储多个数据,而且她的长度是可以发生变化的,当我们创建一个集合对象的时候,因为没有添加元素,所以一开始集合的长度为0,我添加了第一个元素,集合的元素会自动扩容为1,自动扩容不需要你管,直接把元素添加进里面就行,添加第二个元素的时候集合的长度会再次扩容,添加第三个元素的时候集合的长度也会再次扩容,添加第四个再次扩容变成4,添加第五的元素的时候,集合会再次扩容变成5.在这个过程中最重要的就是“自动扩容”!我们只要添加元素就可以
集合与数组的区别
数组是可以存储基本数据类型的,数组也可以存引用数据类型。但是集合想要存整数,小数这样的基本数据类型的时候,集合就不能存储。那我们一定要存12345这样的整数,小数或者是字符的时候,我们把他们变成对应的包装类就可以的。
总结一下了以下两点:
1.数组的长度是固定的,是不可以被改变的,但是集合的长度确实可以被改变的。集合的特点就是自定伸缩可长可短。
2.集合只能存引用数据类型,如果想存基本数据类型的话,需要把他们变成包装类。
ArrayList使用方法
泛型,限定集合中存储数据的类型
我们图片中的尖括号其实就是泛型 ,我们创建对象的时候也要写上这个<>,这个括号的里面,就写我们存储的数据类型就可以。
ArrayList<String> list = new ArrayList<String>();
但是这种写法是JDK7之前的写法,我们现在用的JDK版本,已经不支持这种写法啦。所以现在我们后面的String就可可以删去
public class JiHe {
public static void main(String[] args) {
//1.创建集合的对象
//泛型:限定集合中存储数据的类型
ArrayList<String> list = new ArrayList<>();
System.out.println(list);
}
}
运行结果:
[]
结果分析:我们创建的是ArrayList的对象,而ArrayList是java已经写好的一个,这个类在底层做了一些处理,打印对象不是地址值,而是集合中存储数据内容,在展示的时候会拿[ ]把所有的数据进行包裹 。
增删改查
boolean add(E e) 添加元素,返回值表示是否添加成功
boolean remove(E e) 删除指定元素,返回值表示是否删除成功
E remove(intindex) 删除指定索引的元素,返回被删除元素
E set(int index,E e) 修改指定索引下的元素,返回原来的元素
E get(int index) 获取指定索引的元素
int size() 集合的长度,也就是集合中元素的个数
添加 add
我们可以通过add给集合进行添加
public class JiHe {
public static void main(String[] args) {
//1.创建集合的对象
//泛型:限定集合中存储数据的类型
ArrayList<String> list = new ArrayList<>();
System.out.println(list);
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
System.out.println(list);
}
}
运行结果:
[]
[aaa, bbb, ccc, ddd]
删除 remove
删除集合的元素,返回值是删除的元素。所以我们可以用一个boolean类型的变量来接收这个返回值,如果删除成功返回的就是true,删除失败返回的就是flase
public class JiHe {
public static void main(String[] args) {
//1.创建集合的对象
//泛型:限定集合中存储数据的类型
ArrayList<String> list = new ArrayList<>();
//System.out.println(list);
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
//System.out.println(list);
boolean result = list.remove("aaa");
System.out.println(result);
System.out.println(list);
}
}
运行结果:
true
[bbb, ccc, ddd]
删除 remove下标
remove利用下标来删除,它在删除的时候,会把被删除的元素给你返回。刚刚我们添加的时候一共添加了四个元素。那现在0索引就是一个“aaa",它删除完了之后会把这个aaa给返回,回来。
public class JiHe {
public static void main(String[] args) {
//1.创建集合的对象
//泛型:限定集合中存储数据的类型
ArrayList<String> list = new ArrayList<>();
//System.out.println(list);
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
//System.out.println(list);
// boolean result = list.remove("aaa");
// System.out.println(result);
// System.out.println(list);
String str = list.remove(0);
System.out.println(str);
System.out.println(list);
}
}
运行结果:
aaa
[bbb, ccc, ddd]
set修改
修改其实就是把指定索引的值,修改成后面的新值,会把被覆盖的元素也就是原来的值,给你一个返回。
public class JiHe {
public static void main(String[] args) {
//1.创建集合的对象
//泛型:限定集合中存储数据的类型
ArrayList<String> list = new ArrayList<>();
//System.out.println(list);
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
// String str = list.get(0);
// System.out.println(str);
// System.out.println(list);
String str = list.set(1,"sfa");
System.out.println(str);
System.out.println(list);
}
}
运行结果:
bbb
[aaa, sfa, ccc, ddd]
查询单个元素get
查询单个的元素,返回值就是我们所查询的元素值。函数传递过去的是下标
public class JiHe {
public static void main(String[] args) {
//1.创建集合的对象
//泛型:限定集合中存储数据的类型
ArrayList<String> list = new ArrayList<>();
//System.out.println(list);
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
String str = list.get(0);
System.out.println(str);
System.out.println(list);
}
}
集合练习1-集合的遍历方式
需求:
定义一个集合,添加字符串,并进行遍历
遍历格式参照:[元素1,元素2,元素3]
代码:
public class JiHe {
public static void main(String[] args) {
//1.创建集合
ArrayList<String> s = new ArrayList<>();
//2.添加元素
s.add("写代码了吗");
s.add("吃饭了吗");
s.add("玩手机了吗");
s.add("吃包子了吗");
//3.遍历
System.out.println("[");
for (int i = 0; i < s.size(); i++) {
if(i==s.size()-1){
System.out.println(s.get(i));
}
else{
System.out.println(s.get(i)+", ");
}
}
System.out.println("]");
}
}
运行结果:
[
写代码了吗,
吃饭了吗,
玩手机了吗,
吃包子了吗
]
集合练习2-添加数字并遍历
需求:
定义一个集合,添加数字,并进行遍历
遍历格式参照:[元素1,元素2,元素3]
解题思路:
集合是不能添加数字的,所以我们首先要把它转化成包装类。我们首先要知道基本数据类型所对应的包装类。我们可以使用我们的IDEA把这些包装类关联起来。
byte->Byte,
short->Short,
char->Character,
int->Integer,
long->Long,
float->Float,
double->Double,
boolean->Boolean,
把需要创建的类型,放在集合的泛型中即可,也就是<>就像我们这道题,需要存数字一样。
ArrayList<Integer> s = new ArrayList<>();
代码
public class Text {
public static void main(String[] args) {
//1.创建集合
ArrayList<Integer> s = new ArrayList<>();
//2.添加元素
s.add(1);
s.add(2);
s.add(3);
s.add(4);
s.add(5);
System.out.println("[");
//遍历元素
for (int i = 0; i < s.size(); i++) {
if(i==s.size()-1){
System.out.println(s.get(i));
}else{
System.out.println(s.get(i)+", ");
}
}
System.out.println("]");
}
}
运行结果
[
1,
2,
3,
4,
5
]
集合练习3-添加字符
解题思路
我们添加字符的话,还是跟上面的代码思路一样,只是把泛型中的包装类型改成char字符型所对应的包装即可
代码
public class Text1 {
public static void main(String[] args) {
ArrayList<Character> c = new ArrayList<>();
c.add('a');
c.add('b');
c.add('c');
System.out.println(c);
}
}
运行结果
[a, b, c]
集合练习4:添加学生对象并遍历
需求:定义一个集合,添加一些学生对象,并进行遍历
学生类的属性为:姓名,年龄。
解题思路:我们首先创建一个学生类。然后我们再创建测试类,先创建集合,然后我们键盘录入学生的信息并添加到集合当中。再把刚刚输入的值给到学生对象,再把学生对象添加到集合中。通过for循环加索引找到我们需要打印的学生对象的元素
学生类Student
public class Student {
//私有化成员
//空参构造方法
//带全部参数的构造方法
//对没一个私有化的成员变量都提供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;
}
}
测试类
public class Text3 {
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 s = new Student();
System.out.println("输入学生姓名");
String name = sc.next();
System.out.println("输入学生的年龄");
int age = sc.nextInt();
//把name和age赋值给学生对象
s.setName(name);//set方法是用来赋值给成员变量属性的
s.setAge(age);
//把学生对象添加到集合中
list.add(s);
}
//遍历
for (int i = 0; i < list.size(); i++) {
//i索引 list.get(i) 元素/学生对象
Student stu = list.get(i);
System.out.println(stu.getName()+","+stu.getAge());
}
}
}
运行结果
输入学生姓名
zhangsan
输入学生的年龄
20
输入学生姓名
wangwu
输入学生的年龄
23
输入学生姓名
liuer
输入学生的年龄
25
zhangsan,20
wangwu,23
liuer,25
集合练习5:定义一个集合,存入三个对象
需求
1.main方法中定义一个集合,存入三个用户对象。用户属性为:id,username,password
2.要求:定义一个方法,根据id查找对应的用户信息
如果存在,返回true
如果不存在,返回false
解题思路
我们首先创建以一个User类,它是一个标志的javabean类。然后我们在测试类里面创建集合,然后再创建三个对象,再把用户添加到集合中。调用一下看看id是否存在
代码
User javabean类
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;
}
}
测试类
import java.util.ArrayList;
public class Text4 {
public static void main(String[] args) {
//1.创建集合
ArrayList<User> list = new ArrayList<>();
//2.创建三个用户对象
User u1 = new User("aaa123","zhangsan","7878");
User u2 = new User("aaa222","wangwu","5656");
User u3 = new User("aaa333","liuer","4536");
//3.把用户添加到集合当中
list.add(u1);
list.add(u2);
list.add(u3);
//调用方法查看id是否存在
boolean flag = contains(list,"aaa123");
//5.打印结果
System.out.println(flag);
}
public static boolean contains(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;
}
}
运行结果:
true
集合练习6:返回多个数据
需求
定义javabean类:Phone
Phone属性:品牌,价格
main方法中定义一个集合,存入三个手机对象
分别为:小米1999,苹果8000,锤子 999
定义一个方法,将价格低于3000的手机信息返回。
解题思路
我们先写一个javabean类,然后进行测试类先创建集合对象,再创建手机对象,再添加数据,使用调用方法,遍历集合就完成啦
javabean类
public class Phone {
//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;
}
}
测试类
public class Text5 {
public static void main(String[] args) {
//1.创建集合对象
ArrayList<Phone> list = new ArrayList<>();
//2.创建手机对象
Phone P1 = new Phone("小米",1999);
Phone P2 = new Phone("苹果",8000);
Phone P3 = new Phone("锤子",999);
//3.添加数据
list.add(P1);
list.add(P2);
list.add(P3);
//4.调用方法
ArrayList<Phone> phoneInfolist = getPhoneInfo(list);
//5.遍历集合
for (int i = 0; i < phoneInfolist.size(); i++) {
Phone phone = phoneInfolist.get(i);
System.out.println(phone.getBrand()+","+phone.getPrice());
}
}
public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
ArrayList<Phone> resultList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Phone p = list.get(i);
int price = p.getPrice();
if(price<3000){
resultList.add(p);
}
}
return resultList;
}
}