Java集合常见面试题集锦

news2025/2/25 0:05:41

1、介绍Collection框架的结构

集合是Java中的一个非常重要的一个知识点,主要分为List、Set、Map、Queue三大数据结构。它们在Java中的结构关系如下:

Collection接口是List、Set、Queue的父级接口。

Set接口有两个常用的实现类:HashSet和TreeSet。List接口的常用接口有ArrayList和Vector接口。

Map接口有两个常用的实现类:Hashtable和HashMap。

2、Collection框架中实现比较要实现什么接口

要实现比较有两种方式:第一种,实体类实现Comparable<T>接口,并实现 compareTo(T t) 方法,我们称为内部比较器。第二种,创建一个外部比较器,这个外部比较器要实现Comparator接口的 compare(T t1, T t2)。

第一种,实现Comparable接口:

package com.chanshuyi.comparable;

import java.util.*;

public class Student implements Comparable<Student> {

    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;
    }

    @Override
    public int compareTo(Student o) {
        if ( getAge() > o.getAge()) {
            return 1;
        } else if ( getAge() < o.getAge()) {
            return -1;
        } else {
            return 0;
        }
    }

    //重写toString() 用于输出
    public String toString() {
        return "[" + name + "," + age + "]";
    }

    public static void main(String args[]){
        Student s1 = new Student("Tom", 12);
        Student s2 = new Student("Marry", 9);
        Student s3 = new Student("Json", 88);

        List<Student> studentList = new ArrayList<Student>();
        studentList.add(s1);
        studentList.add(s2);
        studentList.add(s3);

        Collections.sort(studentList);
        System.out.printf("Original  sort, list:%s\n", studentList);
    }
}

复制

第二种,实现Comparator接口:

先定义一个Student类,无须实现任何接口。

public class Student {

    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;
    }
}

复制

定义一个外部比较器类,实现Comparator接口:

public class StudentComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        if (o1.getAge() > o2.getAge()) {
            return 1;
        }else if (o1.getAge() == o2.getAge()) {
            return 0;
        }else{
            return -1;
        }
    }

    public static void main(String args[]) {
        Student marry = new Student("marry", 12);
        Student tom = new Student("tom", 3);
        Student jackson = new Student("jackson", 88);

        StudentComparator comparator = new StudentComparator();
        System.out.println(comparator.compare(marry, tom)); //1
        System.out.println(comparator.compare(tom, jackson));  //-1
    }
}

复制

由此可见,如果你希望该实体类在放入集合的时候能按照你希望的方式排序(如果集合支持),那么你需要让实体类实现Comparable接口。如果你只是需要简单比较两个实体类的大小,最后返回一个结果,那么用Comparator接口实现一个外部比较器更合适。

3、ArrayList和Vector的区别(是否有序、是否重复、数据结构、底层实现)

ArrayList和Vector都实现了List接口,他们都是有序集合,并且存放的元素是允许重复的。它们的底层都是通过数组来实现的,因此列表这种数据结构检索数据速度快,但增删改速度慢。

而ArrayList和Vector的区别主要在两个方面:

第一,线程安全。Vector是线程安全的,而ArrayList是线程不安全的。因此在如果集合数据只有单线程访问,那么使用ArrayList可以提高效率。而如果有多线程访问你的集合数据,那么就必须要用Vector,因为要保证数据安全。

第二,数据增长。ArrayList和Vector都有一个初始的容量大小,当存储进它们里面的元素超过了容量时,就需要增加它们的存储容量。ArrayList每次增长原来的0.5倍,而Vector增长原来的一倍。ArrayList和Vector都可以设置初始空间的大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。

4、HashMap和Hashtable的区别

HashMap和Hashtable都实现了Map接口,并且都是key-value的数据结构。它们的不同点主要在三个方面:

第一,Hashtable是Java1.1的一个类,它基于陈旧的Dictionary类。而HashMap是Java1.2引进的Map接口的一个实现。

第二,Hashtable是线程安全的,也就是说是线程同步的,而HashMap是线程不安全的。也就是说在单线程环境下应该用HashMap,这样效率更高。

第三,HashMap允许将null值作为key或value,但Hashtable不允许(会抛出NullPointerException)。

5、List 和 Map 区别?(数据结构,存储特点)

这个要从两个方面来回答,一方面是List和Map的数据结构,另一方面是存储数据的特点。在数据结构方面,List存储的是单列数据的集合,而Map存储的是key、value类型的数据集合。在数据存储方面,List存储的数据是有序且可以重复的,而Map中存储的数据是无序且key值不能重复(value值可以重复)。

6、List、Map、Set三个接口,存取元素时,各有什么特点?

List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个功共同的父接口,叫Collection。Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象 ,即假设Set集合中有了一个A对象,现在我要向Set集合再存入一个B对象,但B对象与A对象equals相等,则B对象存储不进去。所以,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。

List表示有先后顺序的集合, 注意,不是那种按年龄、按大小、按价格之类的排序。当我们多次调用add(Obj e)方法时,每次加入的对象就像火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用add(int index,Obj e)方法,就可以指定当前对象在集合中的存放位置。一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象,如图x所示。List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。

Map与List和Set不同,它是双列的集合,其中有put方法,定义如下:put(obj key,obj value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。取则可以根据key获得相应的value,即get(Object key)返回值为key 所对应的value。另外,也可以获得所有的key的结合(map.keySet()),还可以获得所有的value的结合(map.values()),还可以获得key和value组合成的Map.Entry对象的集合(map.entrySet())。

List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

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

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

相关文章

libmodbus编程笔记

一 基础知识 地址映射值 Modbus寄存器 Modbus寄存器地址分配 Modbus ASCII消息帧格式 Modbus RTU帧格式 Modbus RTU相邻帧间隔 Modbus寻址范围 PDU与ADU的关系 Modbus TCP/IP ADU与PDU的关系 Modbus TCP/IP与Modbus串行消息构成对比 Modbus TCP/IP协议最大帧数据长度为260字…

人工智能-实验四

第四次实验 一.实验目的 ​ 了解深度学习的基本原理。能够使用深度学习开源工具。学习使用深度学习算法求解实际问题。 二.实验原理 1.深度学习概述 ​ 深度学习源于人工神经网络&#xff0c;本质是构建多层隐藏层的人工神经网络&#xff0c;通过卷积&#xff0c;池化&…

【2 微信小程序学习 - 小程序的架构.配置.app与page】

1 小程序的架构模型 为了避免卡顿,优化性能,小程序使用双线程模型. 可以理解为创建了两个webview,一个负责渲染界面,一个负责js脚本处理,通过微信客户端的native进行中转交互. 2 小程序的配置文件 在多人开发中,一般不修改project.config.json避免冲突 ,而是单人修改project…

Intradeco通过适用于Excel的Liquid UI自动执行SAP MM并节省80%的处理时间

背景 Intradeco为服装制造提供整体方法&#xff0c;涵盖所有阶段&#xff1a;从构思阶段到最终产品分销。它已发展成为一家全球垂直制造公司&#xff0c;客户遍布美国、墨西哥和加拿大。 挑战 提高运营效率 原因&#xff1a;人员必须浏览多个 SAP 事务才能为新材料创建采购订单…

2023年牛客网最新Java面试八股文附答案整理(不管工作几年都可以看看)

很多人都说今年对于 IT 行业根本没有所谓的“金三银四”“金九银十”。在各大招聘网站或者软件上不管是大厂还是中小公司大多都是挂个招聘需求&#xff0c;实际并不招人&#xff1b;在行业内的程序员基本都已经感受到了任老前段时间口中所谓的“寒气”。 虽然事实确实是如此&a…

学顶教育:初级会计师领取证书有关事项

初级会计师职称证书是国家组织考试后颁发的专业技术资格证书&#xff0c;与纸质证书和电子证书具有同等法律效力。 考取初级会计师职称证书的有关事项如下&#xff1a; 1、领取方式 初级会计职称证书的领取方式有两种&#xff1a;现场领取和邮寄领取。 考生可任选其一。 部分…

浪涌保护器和避雷器的区别

线路在使用过程中&#xff0c;由于短路或雷击&#xff0c;会突然产生巨大的能量。一旦这种能量通过线路进入家庭或其他电力线&#xff0c;就会造成设备烧毁&#xff0c;造成生命和财产损失。直流电涌保护器可以通过保护组件立即将巨大的能量吸入地面端子&#xff0c;从而保护您…

[架构之路-207]- 常见的需求分析技术:实用的需求分析与建模详解过程(实操性强)

目录 1.1 需求分析建模的要点与误区 1.1.1 需求分析到底做什么 1.1.1.1 分解的方法 1.1.1.2 提炼、合并、重组 1.1.1.3 消除矛盾 1.1.2 建模的目标和要点 1.1.2.1 建模的目的 1.1.2.2 建模的要点与原则 1.1.3 选择建模工具的要点 1.1.3.1 正确认识建模方法论 1.1.3.…

肠道菌群检测在临床感染判别中的应用

谷禾健康 感染是人类面临的健康威胁之一。各种病原体&#xff0c;如细菌、病毒、真菌、寄生虫等&#xff0c;存在于我们日常接触的环境、物品、食物等中。一些常见的感染病例包括感冒、流感、腹泻、组织器官或血液感染等&#xff0c;在全球范围内广泛传播。这些疾病的传播方式多…

MAYA活塞动画

给组打关键 让下面带动上面一起运动 创建定位器 放在中间 创建两个定位器 一个定位器放在连动秆下面&#xff0c;让定位跟物体一块动 创建目标约束 完成

python基础----07-----异常、模块、包

一 了解异常 当检测到一个错误时&#xff0c;Python解释 器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”&#xff0c;也就是我们常说的BUG。 二 异常的捕获 当我们的程序遇到了BUG&#xff0c;那么接下来有两种情况&#xff1a; …

AcWing算法提高课-1.3.14开心的金明

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 金明今天很开心&#xff0c;家里购置的新房就要领钥匙了&#xff0c;新房里有一间他自己专用的很宽敞的房间。 更让他高兴的是&…

Vue.js中的Render函数和模板语法

Vue.js中的Render函数和模板语法 在Vue.js中&#xff0c;有两种主要的方式来构建组件&#xff1a;使用模板和使用render函数。模板语法是Vue.js中最常见的方式&#xff0c;它是一种基于HTML的语法&#xff0c;能够直接在HTML文件中定义组件的结构和行为。而render函数则是一种…

公司新来一00后,真让人崩溃...

2022年已经结束结束了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备今年的金九银十的面试计划。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必要的&#xff0c;它几乎涵盖了所有的…

设计模式(五):创建型之建造者模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 目录 一、…

让ChatGPT来写今年的高考作文,会得几分?

使用最新的ChatGPT4模型&#xff0c;做2023年全国甲卷的高考作文。 作文考试题目如下 人们因技术发展得以更好地掌控时间&#xff0c;但也有人因此成了时间的仆人。这句话引发了你怎样的联想与思考?请写一篇文章。 要求&#xff1a;选准角度&#xff0c;确定立意&#xff0…

promise、async事件循环机制,你是CV工程师?

在面试的过程中如果不了解promise、async事件循环机制基本就会认为你是CV工程师 首先分析 async/await 其实是基于promise实现的&#xff0c;async 函数其实就是把 promise 做了一个包装 promise 是es6的语法&#xff0c;async/await 是es7的语法糖&#xff0c;所以我们先来分析…

​即将开幕!​2023 年金融营销科技价值发现论坛亮点前瞻

由神策数据主办 Hi-Finance、爱设计、亚马逊云科技 协办和支持的 开放融合 引领营销 5.0 新纪元 暨 2023 年金融营销科技价值发现论坛 即将于 6 月 9-10 日在中国杭州开幕 届时百余位金融数字化从业者将共聚一堂 探讨金融业发展的新思路、新路径、新趋势 2023 年&#xff0c;数…

Windows电脑怎么加密文件?文件加密方法介绍

Windows作为目前使用人数最多的电脑系统&#xff0c;是很多人办公、生活的必要工具。那么你知道在Windows系统中该怎么样加密文件吗&#xff1f;下面我们就来一起了解一下。 方法一&#xff1a;文件夹加密超级大师 想要做好文件加密并不容易&#xff0c;需要保障文件加密的安全…

APP外包开发第三方登录

APP开发过程中往往需要对接第三方的登录&#xff0c;国内的有微信、QQ、微博等&#xff0c;国外的有google、facebook等账号。对接第三方账号登录SDK可以方便用户快捷登录&#xff0c;是APP登录功能里一项重要的特性。今天和大家分享对接流程和注意事项&#xff0c;希望对大家有…