首页 > 其他分享 >集合常见的面试题

集合常见的面试题

时间:2024-03-08 15:33:23浏览次数:10  
标签:面试题 HashMap 常见 value put 线程 key 集合 null

集合常见的面试题

1、你在开发种常用的集合有哪些?

如果没有特殊要求,且元素是单列元素的话,使用ArrayList居多,如果是键值对元素的话,默认使用HashMap居多
其他的集合根据查询或者增删的需求,或者线程安全或不安全来选择。

2、HashMap和Hashtable的区别

共同点:都是实现了Map接口的实现子类,元素都是以键值对的方式存储
不同点:
1、HashMap键和值都允许为null值,Hashtable的键和值都不允许为null值
2、HashMap线程不安全,Hashtable是线程安全的

3、List,Set,Map等接口是否都继承子Map接口

Map接口才是,List和Set是继承Collection接口的

Collection(接口)
        - List(接口) 元素有序且允许重复
            - ArrayList 底层数据结构是数组,查询快,增删慢,线程不安全,效率高
            - Vector 底层数据结构是数组,查询快,增删慢,线程安全的,效率低。即便是线程安全的,后面也不用。
            - LinkedList 底层数据结构是双链表,增删快,查询慢,线程不安全,效率高
        - Set(接口)  元素无序且唯一
            - HashSet 底层数据结构是哈希表,元素类中要重写hashCode()和equals方法,线程不安全,效率高
                - LinkedHashSet 底层数据结构是哈希表和双链表,哈希表保证了元素的唯一性,双链表保证了元素的有序,线程不安全,效率高
            - TreeSet 底层数据结构是红黑树,可以进行自定义排序
                自然排序:要求创建集合对象的时候是无参构造方法,且元素类要实现Comparable接口,并重写compareTo方法
                比较器排序:要求在创建集合对象的时候,构造方法中需要传入Comparator接口的实现子类对象,重写compare方法

Map(接口)
    - HashMap(子类)
        - LinkedHashMap(子类)
        - TreeMap(子类)

这里的 HashMap 可以在key和value传值的时候任意传入null

package com.shujia.day14;
import java.util.HashMap;

public class MianShiDemo {
    public static void main(String[] args) {
        HashMap<String, String> map1 = new HashMap<>();
     /*
            public V put(K key, V value) {
                return putVal(hash(key), key, value, false, true);
            }
     */
        map1.put("s","a");
        System.out.println(map1);
        map1.put(null,"a");
        System.out.println(map1);
        map1.put("s",null);
        System.out.println(map1);
        map1.put(null,null);
        System.out.println(map1);
    }
}

但是这里的 Hashtable 在传入值的时候key和value都不能传入null

package com.shujia.day14;
import java.util.HashMap;
import java.util.Hashtable;

public class MianShiDemo {
    public static void main(String[] args) {
           /*
        public synchronized V put(K key, V value) {
            // Make sure the value is not null
            if (value == null) {
                throw new NullPointerException();
            }

            // Makes sure the key is not already in the hashtable.
            Entry<?,?> tab[] = table;
            int hash = key.hashCode();
            int index = (hash & 0x7FFFFFFF) % tab.length;
            @SuppressWarnings("unchecked")
            Entry<K,V> entry = (Entry<K,V>)tab[index];
            for(; entry != null ; entry = entry.next) {
                if ((entry.hash == hash) && entry.key.equals(key)) {
                    V old = entry.value;
                    entry.value = value;
                    return old;
                }
        }
         */
        Hashtable<String, String> map2 = new Hashtable<>();
        map2.put("s","a");
        System.out.println(map2);
        map2.put(null,"a");
        System.out.println(map2);
        map2.put("s",null);
        System.out.println(map2);
        map2.put(null,null);
        System.out.println(map2);
    }
}

这里除了第一个可以正常传值之外,其他三个都会报错

标签:面试题,HashMap,常见,value,put,线程,key,集合,null
From: https://www.cnblogs.com/peculiar/p/18061104

相关文章

  • Maven常见指令
    Maven笔记Maven库https://mvnrepository.com/坐标groupid:公司或组织域名倒序​ com.ys.maven​ 识别资源的位置artifactid:模块名,也是实际项目的名称实例书写<!--pom.xml中--><dependency><groupId>junit</groupId><artifactId>junit</artifactId>......
  • 动图演示步骤 Vmware安装Centos-7 最小安装/图形化界面及常见错误参考,基础配置推荐
    程序软件工具安装篇--【Linux】(Vmware/Centos-7)目录程序软件工具安装篇--【Linux】(Vmware/Centos-7)①:文件准备工作虚拟机工具安装文件系统镜像文件②:Vmware安装工作③:Centos安装工作④:Centos安装常见错误⑤:基础配置参考⑥:注意事项①:文件准备工作虚拟机工具安装......
  • 20240307正则表达式对常见字段的校验
    验证固话号码//表示以0开头,后跟2到3位数字,然后是-,最后是7到8位数字。publicstaticbooleancheckPhoneNumber(StringphoneNumber){if(StringUtils.isEmpty(phoneNumber)){returnfalse;}Patternpattern=Pattern.co......
  • 常见中小型企业组网架构详解
    “ 中小型企业内网网络架构是怎么组成的,分几层结构,vlan怎样划分,常用到的动态路由协议,静态路由协议,基本上所有三层二层技术全部会用得到!”网络拓扑这里用Cisco的packettracer教学工具进行搭建演示。整体网络拓扑如下所示。应用到的技术有:OSPF、VLAN、VTP、Channel、HSRP、SVI、......
  • 常见性能优化方案与实用工具
    微信工程师:常见性能优化方案与实用工具https://mp.weixin.qq.com/s/glrqsyBSIVCDp7oZw2rO_w......
  • 常见测试模型有哪些?
    在软件开发过程中,人们根据经验教训并结合未来软件的发展趋势总结出了很多软件开发模型,如瀑布模型、快速原型模型、迭代模型等,这些模型对软件开发过程具有很好的指导作用,但遗憾的是它们对软件测试并没有给予足够的重视,利用这些模型无法更好地指导软件测试工作。软件测试是......
  • 常见问题解决 ---
    问题描述Internalerror.Pleaserefertohttps://jb.gg/ide/critical-startup-errorsjava.lang.AssertionError:FailedtoreadC:\Users\**\updatedBrokenPlugins.dbatcom.intellij.openapi.diagnostic.DefaultLogger.error(DefaultLogger.java:54)atcom.intellij......
  • 阐述软件生命周期都有哪些阶段?常见的软件生命周期模型有哪些?
    软件生命周期是指一个计算机软件从功能确定、设计,到开发成功投入使用,并在使用中不断地修改、增补和完善,知道啊停止该软件的使用的全过程(从酝酿到废弃的过程)。生命周期从收到应用软件开始算起,到该软件不再使用为止。它有如下各方面的内容:初始构思、需求分析、功能设计、内......
  • 大语言模型常见的文本切分之语义嵌入
    语料准备选择了一篇新闻稿,有比较明显的段落区分,每个段落由若干句子构成,可用于验证切分效果。#节气释义小寒,是二十四节气中的第二十三个节气,太阳到达黄经285度时开始。《月令七十二候集解》中说:“十二月节,月初寒尚小,故云。月半则大矣。”冷气积久而寒,小寒是天气寒冷但还没有......
  • 大语言模型常见的文本切分方式整理汇总
    整理本文整理了一些简单的文本切分方式,适用于大语言模型经典应用RAG或相似场景。一般切分如果不借助任何包,很容易想到如下切分方案:text="我是一个名为ChatGLM3-6B的人工智能助手,是基于清华大学KEG实验室和智谱AI公司于2023年共同训练的语言模型开发的。我的目标是......