Java笔记028-集合章节练习

news2025/1/15 17:27:37

Java笔记028-集合章节练习

  1. 编程题

按要求实现:

  1. 封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题

  1. 只提供一个带参构造器,实例化对象时,只初始化标题,并且实例化两个对象:

新闻一:新冠确诊病例超过千万,数百万印度教信徒赴恒河“圣浴”引民众担忧

新闻二:男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生

  1. 将新闻对象添加到ArrayList集合中,并且进行倒叙遍历

  1. 在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前15个,然后在后边加“...”

  1. 在控制台打印遍历出经过处理的新闻标题

package com14.exercise;

import java.util.ArrayList;

/**
 * @author 甲柒
 * @version 1.0
 * @title exercise01
 * @package com14.exercise
 * @time 2023/2/27 21:07
 */
@SuppressWarnings({"all"})
public class exercise01 {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add(new News("新冠确诊病例超过千万,数百万印度教信徒赴恒河“圣浴”引民众担忧"));
        arrayList.add(new News("男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生"));

        int size = arrayList.size();
        for (int i = size - 1; i >= 0; i--) {
//            System.out.println(arrayList.get(i));
            News news = (News) arrayList.get(i);
            System.out.println(processTitle(news.getTitle()));
        }
    }

    //专门写一个方法,处理显示新闻标题 process处理
    public static String processTitle(String title) {
        if (title == null) {
            return "";
        }
        if (title.length() > 15) {
            return title.substring(0, 15) + "...";//[0, 15)
        } else {
            return title;
        }
    }
}

/**
 * 按要求实现:
 * 1. 封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题
 * 2. 只提供一个带参构造器,实例化对象时,只初始化标题,并且实例化两个对象:
 * 新闻一:新冠确诊病例超过千万,数百万印度教信徒赴恒河“圣浴”引民众担忧
 * 新闻二:男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生
 * 3. 将新闻对象添加到ArrayList集合中,并且进行倒叙遍历
 * 4. 在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前15个,然后在后边加“...”
 * 5. 在控制台打印遍历出经过处理的新闻标题
 */
class News {
    private String title;
    private String content;

    public News(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "News{" +
                "title='" + title + '\'' +
                '}';
    }
}
  1. 编程题

使用ArrayList完成对 对象Car{name, price}的各种操作

  1. add:添加单个元素

  1. remove:删除指定元素

  1. contains:查找元素是否存在

  1. size:获取元素个数

  1. isEmpty:判断是否为null

  1. clear:清空

  1. addAll:添加多个元素

  1. containsAll:查找多个元素是否都存在

  1. removeAll:删除多个元素

使用增强for和迭代器来遍历所有的car,需要重写Car的toString方法

package com14.exercise;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @author 甲柒
 * @version 1.0
 * @title Exercise02
 * @package com14.exercise
 * @time 2023/2/27 21:28
 */
@SuppressWarnings({"all"})
public class Exercise02 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        Car car = new Car("宝马", 400000);
        Car car1 = new Car("宾利", 5000000);
//        使用ArrayList完成对 对象Car{name, price}的各种操作
//        1. add:添加单个元素
        list.add(car);
        list.add(car1);
        System.out.println(list);
//        2. remove:删除指定元素
        list.remove(car);
        System.out.println(list);
//        3. contains:查找元素是否存在
        System.out.println(list.contains(car));//false
//        4. size:获取元素个数
        System.out.println(list.size());//1
//        5. isEmpty:判断是否为null
        System.out.println(list.isEmpty());//false
//        6. clear:清空
//        list.clear();
        System.out.println(list);//null
//        7. addAll:添加多个元素
        list.addAll(list);
        System.out.println(list);//2个宾利
//        8. containsAll:查找多个元素是否都存在
        System.out.println(list.containsAll(list));//true
//        9. removeAll:删除多个元素
//        list.removeAll(list);//相当于清空
        System.out.println(list);
//        使用增强for和迭代器来遍历所有的car,需要重写Car的toString方法
        for (Object o : list) {
            System.out.println(o);
        }

        //迭代器
        System.out.println("+++++++迭代器++++++");
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
        }
    }
}

/**
 * 使用ArrayList完成对 对象Car{name, price}的各种操作
 * 1. add:添加单个元素
 * 2. remove:删除指定元素
 * 3. contains:查找元素是否存在
 * 4. size:获取元素个数
 * 5. isEmpty:判断是否为null
 * 6. clear:清空
 * 7. addAll:添加多个元素
 * 8. containsAll:查找多个元素是否都存在
 * 9. removeAll:删除多个元素
 * 使用增强for和迭代器来遍历所有的car,需要重写Car的toString方法
 */
class Car {
    private String name;
    private double price;

    public Car(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}
  1. 编程题

按要求完成下列任务

  1. 使用HashMap类实例化一个Map类型的对象m,键(String)和值(int)分别用于存储员工的姓名和工资,存入数据如下:jack——650¥;tom——1200¥;smith——2900¥

  1. 将jack的工资更改为2600¥

  1. 为所有员工工资加薪100¥

  1. 遍历集合中所有的员工

  1. 遍历集合中所有的工资

package com14.exercise;

import java.util.*;

/**
 * @author 甲柒
 * @version 1.0
 * @title Exercise03
 * @package com14.exercise
 * @time 2023/2/27 21:57
 */
@SuppressWarnings({"all"})
public class Exercise03 {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put("jack", 650);//int->Integer
        map.put("tom", 1200);//int->Integer
        map.put("smith", 2900);//int->Integer
        System.out.println(map);
        map.replace("jack", 2600);//替换
        System.out.println(map);
//        为所有员工工资加薪100¥
        Set keySet = map.keySet();
        for (Object o : keySet) {
            //更新
            map.put(o, (Integer) map.get(o) + 100);
        }
        System.out.println(map);
        //遍历集合中所有的员工
        //entrySet
        System.out.println("====遍历集合中所有的员工====");
        Set entrySet = map.entrySet();
        //迭代器
        Iterator iterator = entrySet.iterator();
        while (iterator.hasNext()) {
            Map.Entry next = (Map.Entry) iterator.next();
            System.out.println(next.getKey());
        }

        //遍历集合中所有的工资
        System.out.println("=====遍历所有的工资=====");
        Collection values = map.values();
        for (Object o : values) {
            System.out.println("工资=" + o);
        }

    }
}
/**
 * 按要求完成下列任务
 * 1. 使用HashMap类实例化一个Map类型的对象m,
 * 键(String)和值(int)分别用于存储员工的姓名和工资,
 * 存入数据如下:jack——650¥;tom——1200¥;smith——2900¥
 * 2. 将jack的工资更改为2600¥
 * 3. 为所有员工工资加薪100¥
 * 4. 遍历集合中所有的员工
 * 5. 遍历集合中所有的工资
 */
  1. 简答题

试分析HashSet和TreeSet分别如何实现去重

  1. HashSet的去重机制:hashCode() + equals(),底层先通过存入对象,进行运算得到一个hash值,通过hash值得到对应的索引,如果发现table索引所在的位置,没有数据,就直接存放,如果有数据,就进行equals比较[遍历比较],如果比较后,不相同,就加入,否则就不加入。

  1. TreeSet的去重机制:如果你传入了一个数据Comparator匿名对象,就使用实现的compare去重,如果方法返回0,就认为是相同的元素/数据,就不添加,如果你没有传入一个Comparator匿名对象,则以你添加的对象实现的Comparable接口的compareTo去重。

package com14.exercise;

import java.util.TreeSet;

/**
 * @author 甲柒
 * @version 1.0
 * @title Exercise04
 * @package com14.exercise
 * @time 2023/2/28 19:11
 */
public class Exercise04 {
    public static void main(String[] args) {
        TreeSet treeSet = new TreeSet();
        treeSet.add("甲柒");
        treeSet.add("tom");
        treeSet.add("king");
        treeSet.add("甲柒");//加入不了
        System.out.println(treeSet);

    }
}
  1. 代码分析题

下面代码会不会抛出异常,并从源码层面说明原因。[考察 读源码+接口编程+动态绑定]

package com14.exercise;

import java.util.TreeSet;

/**
 * @author 甲柒
 * @version 1.0
 * @title Exercise05
 * @package com14.exercise
 * @time 2023/2/28 19:36
 */
@SuppressWarnings({"all"})
public class Exercise05 {
    public static void main(String[] args) {
        TreeSet treeSet = new TreeSet();
        //分析源码
        //add方法,因为TreeSet()构造器没有传入Comparator接口的匿名内部类
        //所以把底层Comparable<? super K> K = (Comparable<? super K>) key;
        //即 把Person转成Comparable
        treeSet.add(new Person());//ClassCastException
    }
}

class Person {
}
//解决方法
//class Person implements Comparable {
//
//    @Override
//    public int compareTo(Object o) {
//        return 0;
//    }
//}
  1. 下面的代码输出什么

已知:Person类按照id和name重写了hashCode和equals方法,问下面代码输出什么

package com14.exercise;

import java.util.HashSet;
import java.util.Objects;

/**
 * @author 甲柒
 * @version 1.0
 * @title Exercise06
 * @package com14.exercise
 * @time 2023/2/28 19:50
 */
@SuppressWarnings({"all"})
public class Exercise06 {
    public static void main(String[] args) {
        HashSet set = new HashSet();//ok
        Person06 p1 = new Person06(1001, "AA");//ok
        Person06 p2 = new Person06(1002, "BB");//ok
        set.add(p1);//ok
        set.add(p2);//ok
        p1.name = "CC";
        set.remove(p1);
        System.out.println(set);
        set.add(new Person06(1001, "CC"));
        System.out.println(set);
        set.add(new Person06(1001, "AA"));
        System.out.println(set);
    }
}

class Person06 {
    public int id;
    public String name;

    public Person06(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person06 person06 = (Person06) o;
        return id == person06.id && Objects.equals(name, person06.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }

    @Override
    public String toString() {
        return "Person06{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
  1. 试写出Vector和ArrayList的比较

底层结构

版本

线程安全(同步)效率

扩容倍数

ArrayList

可变数组

JDK1.2

不安全,效率高

如果使用有参构造器按照1.5倍扩容

使用无参构造器

第一次扩容10

从第二次开始扩容按照1.5倍

Vector

可变数组Object[]

JDK1.0

安全,效率不高

如果是无参,默认10,满后按照2倍扩容

如果是指定大小创建Vector,则每次按照2倍扩容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】Java进阶学习笔记(一)—— 面向对象(封装)

【Java】Java进阶学习笔记&#xff08;一&#xff09;—— 面向对象&#xff08;封装&#xff09;一、类中成分1、类中成分2、this关键字this() 访问构造器方法3、static关键字1. 成员变量的区分2. 成员方法的区分3. 成员变量访问语法的区分二、封装1、封装的定义封装的好处2、…

excel之古诗词打乱排序

最终效果 制作过程: 一、选择一首古诗&#xff0c;将正文内容连接起来&#xff0c;放在一个单元格中 二&#xff0c;由于这首诗是20字的&#xff0c;加工20个不重复的随机数&#xff0c;具体公式如下图 &#xff08;写好第一行数据&#xff0c;拖动下拉即可&#xff09; 其中…

虚拟机上安装openKylin详细步骤总结

一、创建虚拟机 首先获取操作系统安装镜像文件&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1tSuXmDk2ZILR4ieee6iImw?pwdcy47 提取码&#xff1a;cy47 &#xff08;1-1&#xff09;进入新虚拟机创建向导&#xff0c;选择“自定义”&#xff1a; &#xff08;1-…

创业做校园外卖平台,该如何把自己的平台宣传出去?

如何宣传校园外卖平台&#xff1f;主要看平台宣传&#xff0c;配套宣传工具不一样&#xff01; 我认为有以下几点&#xff1a; 1.建立以宿舍楼为基础的推广团队&#xff0c;依托平台分佣&#xff0c;并能做到每个宿舍楼的送餐和广告分发&#xff1b; 2.根据学生的消费习惯&a…

【带组态源码】Java物联网平台源码 Modus RTU协议 文档齐全 带移动手机端

▶ 组态功能强大、组件丰富 ▶ 组态设计功能强大&#xff1a;包括基础组件、消息组件、图表组件三大类 ▶ 基础组件包括&#xff1a;位按钮、窗口按钮、多态、图片按钮、流动、静态文本、动态变量、输入框、滑块、选择框、网格、矩形、椭圆、直线、自定义形状。 ▶ 图表组件包…

如何用Postman测试整套接口?测试流程是什么?

目录 基于postman测试接口(整套接口测试) 可以解决的问题 开启控制台 单个测试尝试 使用请求结果当参数 打印结果(JSON) 自定义可视化结果 随机参数 测试用例连接 一键测试接口集合 从swagger导入接口 自定义全局变量 总结感谢每一个认真阅读我文章的人&#xff01…

异步简单实现一人一单

本项目码云地址&#xff1a;https://gitee.com/flowers-bloom-is-the-sea/distributeNodeSolvePessimisticLockByRedis/tree/version3/ 项目前身&#xff1a;https://gitee.com/flowers-bloom-is-the-sea/distributeNodeSolvePessimisticLockByRedis/tree/version2.0/ 异步实…

java易错题锦集系列五

接口中不能有构造方法&#xff0c;抽象类中可以有。抽象类中构造方法作用&#xff1a;初始化抽象类的成员&#xff1b;为继承它的子类使用 定义在同一个包&#xff08;package&#xff09;内的类是可以不经过import而直接相互使用 final修饰的方法可以被重载 但不能被重写 从…

论文阅读:Self-Supervised Monocular Depth Estimation with Internal Feature Fusion(DIFFNet)

中文标题&#xff1a;基于内部特征融合的自监督单目深度估计 创新点 参照HR-Net在网络上下采样的过程中充分利用语义信息。设计了一个注意力模块处理跳接。提出了一个扩展的评估策略&#xff0c;其中方法可以使用基准数据中的困难的情况进行进一步测试&#xff0c;以一种自我…

计算机科学导论笔记(一)

一、绪论 1.1 图灵模型 Alan Turing在1937年首次提出了一种通用计算设备的设想&#xff0c;他设想所有的计算都能在一种特殊的机器上执行&#xff0c;这就是现在所说的图灵机。但图灵机只是一种数学上的描述&#xff0c;并不是一种真正的机器。 1.1.1 数据处理器 在讨论图灵…

X和Ku波段小尺寸无线电设计

卫星通信、雷达和信号情报(SIGINT)领域的许多航空航天和防务电子系统早就要求使用一部分或全部X和Ku频段。随着这些应用转向更加便携的平台&#xff0c;如无人机(UAV)和手持式无线电等&#xff0c;开发在X和Ku波段工作&#xff0c;同时仍然保持极高性能水平的新型小尺寸、低功耗…

自动化测试——读写64位操作系统的注册表

非Web程序&#xff08;桌面程序&#xff09;的设置一般都存在注册表中。 给这些程序做自动化测试时&#xff0c; 需要经常要跟注册表打交道。 通过修改注册表来修改程序的设置。 本章介绍如何利用C#程序如何操作注册表&#xff0c; 特别是如何操作64位操作系统的注册表。 自动…

一文介绍Doris

文章目录一、架构介绍1.名词解释2.FE(Frontend)3.BE&#xff08;Backend&#xff09;4.元数据结构二、存储介绍1.DataPage2.Footer信息3.index pages三、索引介绍1.Ordinal Index(一级索引)2.Short Key Index 索引3.ZoneMap Index 索引4.BloomFilter索引5.Bitmap Index 索引6.索…

tensor常用代码

1.创建一个自定义形状的tensor&#xff0c;元素类型为int&#xff0c;并为随机数 a torch.randint(1, 10, size[4,2]) # 元素为1-10之间的随机数 2.将tensor中&#xff0c;元素类型改为float b a.float() b a.double() 3.在tensor的最外层增加一个维度 (tensor[None]) …

FATE数据上传、读取、训练、保存

fate如何安装&#xff1f;本文续这篇文章。 背景 fate是一个服务&#xff0c;还原联邦学习&#xff0c;所以分client和host两种身份&#xff0c;一般来说用户都是client&#xff0c;用户想要上传自己的数据&#xff0c;合并他人数据最终获得一个更好的模型&#xff0c;所以要…

织梦文章无图自动出图配图插件支持采集

织梦文章无图自动出图配图插件的优点 1、提高文章的可读性和吸引力&#xff1a;插入图片可以丰富文章的内容和形式&#xff0c;增强读者的阅读体验和吸引力&#xff0c;提高文章的点击率和转化率。 2、节省时间和精力&#xff1a;手动添加图片需要花费大量时间和精力去寻找和…

浅谈cocos2dx渲染方式

场景的渲染 Node:visit 其作用是遍历整个场景渲染树。 部分代码如下 if(!_children.empty()) {sortAllChildren();// draw children zOrder < 0for(auto size _children.size(); i < size; i){auto node _children.at(i);if (node && node->_localZOrder…

HU4056H耐压高达28V,具有电源OVP功能的1A单节锂离子电池线性充电IC

产品概述 HU4056H是一款完整的采用恒定电流/恒定电压的高压、大电流、单节锂离子电池线性充电 IC。最高耐压可达 28V&#xff0c; 6.5V 自动过压保护&#xff0c;充电电流可达 1A。 由于采用了内部 PMOSFET 架构&#xff0c;加上防倒充电路&#xff0c;所以不需要外部隔离二…

【博学谷学习记录】超强总结,用心分享丨人工智能 机器学习 集成学习错题总结

目录题目1&#xff1a;下面关于提升树的说法哪个是正确的&#xff1f;题目2&#xff1a;下面关于随机森林和梯度提升集成方法的说法哪个是正确的&#xff1f;集成学习主要有哪几种框架&#xff1f;工作过程是&#xff1f;题目1&#xff1a;下面关于提升树的说法哪个是正确的&am…

亿发软件:钉钉移动ERP业务在线,审批、管理更方便!

钉钉系统是企业级智能移动办公平台&#xff0c;平台覆盖大中小微各量级企业&#xff0c;帮助中国企业移动办公管理。企业无需复杂的部署操作&#xff0c;在对应的功能制定流程和相关负责人即可。 亿发企业ERP管理系统于2022年与钉钉系统做了对接&#xff0c;提供一站式的企业管…