JAVA集合(第十五节)

集合的特性

        数组的长度是固定的一旦创建好了之后,长度就不能发生变化啦,那能不能有一个容器她的长度是可变的呢?当然是有的,就是“集合”,集合就是一个容器,可以存储多个数据,而且她的长度是可以发生变化的,当我们创建一个集合对象的时候,因为没有添加元素,所以一开始集合的长度为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;
    }

}

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值