Java基础之集合框架

Java基础之集合框架

认识集合
数组存在一些缺陷,所以提出集合的概念

Java 集合框架 位于 java.util 包中
在这里插入图片描述

下表总结了Java中Vector类的一些常用方法:

方法描述
add(E element)将指定元素添加到Vector的末尾
add(int index, E element)在指定的索引位置插入指定元素到Vector
remove(int index)删除指定索引位置的元素
remove(Object obj)删除第一次出现的指定元素
clear()清空Vector中的所有元素
get(int index)返回指定索引位置的元素
set(int index, E element)将指定索引位置的元素设置为指定的元素
size()返回Vector中的元素数量
isEmpty()检查Vector是否为空
contains(Object obj)检查Vector是否包含指定元素
indexOf(Object obj)返回第一次出现的指定元素的索引位置
lastIndexOf(Object obj)返回最后一次出现的指定元素的索引位置
toArray()Vector转换为数组
addAll(Collection<? extends E> collection)将指定集合中的所有元素添加到Vector的末尾
containsAll(Collection<?> collection)检查Vector是否包含指定集合中的所有元素
removeAll(Collection<?> collection)删除Vector中与指定集合中元素相同的所有元素
retainAll(Collection<?> collection)保留Vector中与指定集合中元素相同的元素,删除其他元素
iterator()返回在Vector上进行迭代的迭代器

这些方法提供了对Vector对象进行添加、删除、获取、查询等常见操作的功能。Vector类是线程安全的,支持同步操作,适用于多线程环境下的使用。需要注意的是,由于同步开销较大,Vector在单线程环境下性能可能不如ArrayList。如果在单线程环境下使用,推荐使用ArrayList类。
例:

package com.kfm.JavaBase.Collection;

import java.util.Comparator;
import java.util.Vector;

public class Exer {
    /**
     * 创建一个集合, 存储 5 个 Student 对象(name, age, toString, equals, hashCode, getter/setter).
     *  1. 设计方法对集合元素,按照年龄进行排序
     *  2. 输出排序后的集合元素
     *  3. 将下标为 3 的学生的姓名改成 "三娃"
     *  4. 在下标为 4 处添加学生 五娃 20岁
     *  6. 删除最后一个学生
     *  7. 遍历输出每个学生的姓名
     */

    public static void main(String[] args) {

        //创建新对象
        Student stu1 = new Student("南北",20);
        Student stu2 = new Student("纬钧",18);
        Student stu3 = new Student("弘石",22);
        Student stu4 = new Student("九明",21);
        Student stu5 = new Student("启程",19);

        //创建集合
        Vector vector = new Vector();

        //将 对象 装入集合
        vector.add(stu1);
        vector.add(stu2);
        vector.add(stu3);
        vector.add(stu4);
        vector.add(stu5);


        //设计方法对集合元素,按照年龄进行排序
        sort(new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {//创建比较器 将相邻元素进行排序
               //将 Object 类型 强转为 student 类型
                //这里也可为 o1 o2 属于 student 类型
                Student stu1 = (Student) o1;
               Student stu2 = (Student) o2;
               //根据年龄进行排序 所以 先从 对象数组中 获取 年龄
               return stu1.getAge() > stu2.getAge()? 1: -1;
            }
        }, vector);//集合名称

        //输出排序后的集合元素
        for (Object stu : vector){
            System.out.println(stu);
        }

       // vector.set(3,new Student("三娃",22));

        //在修改 字段内容时 一定要记得此时获取到的 要修改的元素 一定是属于当前对象数组的
        if (vector.get(3) instanceof Student student){
            student.setName("三娃");
        }

        vector.add(4,new Student("五娃",20));

        vector.remove(vector.size()-1);//删除最后一个元素 是以下标来论


        for (Object stu : vector){
            System.out.println(stu);
        }

        //遍历输出每个学生的姓名
        for (Object stu : vector){
            if ( stu instanceof Student student){
                System.out.println(student.getName());
            }
        }
    }

    //自己写 sort 方法 运用 比较器
    private static void sort(Comparator comparator,Vector stu) {//比较器 和 要被比较的元素的集合

        for (int i = 0 ; i < stu.size()-1;i++){
            for (int j = 0 ; j < stu.size() - 1 - i;j++){
                if (comparator.compare(stu.get(j),stu.get(j+1))>0){
                    Object temp = stu.get(j);
                    stu.set(j,stu.get(j+1));
                    stu.set(j+1,temp);
                }
            }
        }
    }
}

List.of()的使用

List.of()是Java 9中引入的一个新方法,它用于创建一个包含给定元素的不可变列表。不可变列表是一种特殊类型的列表,它不允许对其实例进行修改。以下是对List.of()应用的一些总结:

创建不可变列表:List.of()方法允许你创建一个包含给定元素的不可变列表。这意味着你不能向该列表添加或删除元素。

java
List list = List.of(“apple”, “banana”, “orange”);
元素数量限制:List.of()最多可以包含9个元素。如果你尝试使用超过9个元素,将会抛出TooManyElementsException异常。
元素类型:你可以使用任何类型的元素创建不可变列表,例如基本类型、对象引用类型等。
可与其他不可变集合操作:由于不可变列表是集合框架的一部分,因此你可以将其与其他不可变集合(如Set、Map)进行操作。例如,你可以使用stream()方法对不可变列表进行流操作。
性能:由于不可变列表在创建后不能被修改,因此它们在内存使用和性能方面具有一定的优势。由于不需要进行额外的对象创建和复制操作,对于大量只读操作,使用不可变列表可能会比其他类型的列表更快。
可被用作方法的参数:由于不可变列表是线程安全的,因此它们可以作为方法的参数类型,特别是那些在多线程环境中被调用的方法。
扩展性:虽然List.of()最多只能包含9个元素,但你可以使用List.copyOf()方法从已有的集合创建不可变列表。这使得你可以创建任意大小的不可变列表。
总之,List.of()提供了一种方便且安全的方式来创建不可变列表,适用于需要确保列表不可修改的场景。

package com.kfm.JavaBase.Collection;

import java.util.List;
import java.util.Scanner;

public class GoodsList {
    /**
    创建一个List集合,添加多个商品名称。实现根据输入查询某个商品是否存在,如果存在则输
    出信息
     */
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入商品:");
        String o = sc.next();

        List goods = List.of("草莓","辣条","薯片","巧克力","糖果");


        if (goods.contains(o)){

            System.out.println("找到商品啦!商品是:" + o);
        }else {
            System.out.println("商品不存在");
        }
    }
}

使用vector动态存储数据

特点:动态数组 线程安全 支持随机访问 可以包含重复元素 可以插入null元素
Vector vector = new Vector;//创建初始容量为10的对象
默认扩容方式: 按倍增长``
两个元素之间的比较形式

if (comparator.compare(stu.get(j),stu.get(j+1))>0){
                    Object temp = stu.get(j);
                    stu.set(j,stu.get(j+1));
                    stu.set(j+1,temp);
                }
package com.kfm.JavaBase.Collection;

import java.util.Comparator;
import java.util.Vector;

public class StudentList {
    /**
     * 创建一个List集合表示学生列表。添加10个学生并设计方法实现根据学生成绩排序和计算
     * 平均成绩功能
     */

    public static void main(String[] args) {
        Vector vector = new Vector();

        Student stu1 = new Student("南",20,87);
        Student stu2 = new Student("北",20,97);
        Student stu3 = new Student("纬",20,82);
        Student stu4 = new Student("钧",20,91);
        Student stu5 = new Student("九",20,78);
        Student stu6 = new Student("明",20,80);
        Student stu7 = new Student("凯",20,56);
        Student stu8 = new Student("启",20,81);
        Student stu9 = new Student("程",20,77);
        Student stu0 = new Student("弘",20,82);

        vector.add(stu1);
        vector.add(stu2);
        vector.add(stu3);
        vector.add(stu4);
        vector.add(stu5);
        vector.add(stu6);
        vector.add(stu7);
        vector.add(stu8);
        vector.add(stu9);
        vector.add(stu0);

        vector.sort(new Comparator() {//设计方法实现根据学生成绩排序
            @Override
            public int compare(Object o1, Object o2) {
               if (o1 instanceof Student stu1 && o2 instanceof Student stu2){
                   return stu1.getGrade() - stu2.getGrade();
               }
               return 0;
            }
        });

        for (Object obj : vector){
            System.out.println(obj);
        }

        double i = avg(vector);
        System.out.printf("平均成绩为:"+"%.2f",i);//保留两位小数 点几f 说明保留几位小数
    }

   //设计方法求平均值
    private static double avg(Vector vector) {//
        double sum = 0.0;
        for (Object obj : vector){
            if (obj instanceof Student stu){
                sum += stu.getGrade();
            }
        }
        return sum/vector.size();

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值