首页 > 编程语言 >JAVA基础面试题

JAVA基础面试题

时间:2023-03-28 12:02:02浏览次数:35  
标签:面试题 JAVA HashMap 实现 元素 基础 接口 链表 存放

JAVA基础面试题


1、请说说Java中的集合类,项目中是怎么使用的?

  1. Java集合主要是Collection接口和Map接口,以及它们的子接口和实现类。
  2. Collection接口下有子接口List和Set。
    1. List接口的实现类主要有ArrayList,Vector,LinkedList。
      1. ArrayList线程不安全,底层实现是一个Object类型的动态数组。存放的元素是有序的,但是可以重复。ArrayList在逻辑上是顺序结构,所以查询速度快,但是对数据的新增和删除效率低。在jdk1.7中,ArrayList的初始化长度是10,jdk1.8中初始化长度为0。当需要扩容时,是按照原长度的1.5倍进行扩容的。扩容时会复制旧的数据到新的数组中,并将引用指向新的数组。
      2. Vector是线程安全的容器。Vector里面的方法都用synchronized关键字修饰的。底层实现上也是一个Object类型的数组,初始化长度为10,扩容时按照2倍进行扩容。
      3. LinkedList实现上双向链表。存放数据时是包装成节点对象存储的,一个节点中除了存放元素之外,还有两个分别指向前一个节点和后一个节点的指针,所以对于LinkedList而言遍历查询效率低,但是对于插入和删除的效率高。
    2. Set接口的实现类主要有HashSet,TreeSet,LinkedHashSet,这三个都是线程不安全的。
      1. HashSet存放的元素是唯一且无序的,无序指的是存放元素时不会按照输入的顺序存放,遍历时也不会按照升序或者降序来排列。底层实现上是哈希表,这样就要求存放的元素必须重写equals和hashCode方法。
      2. LinkedHashSet继承了HashSet,存放的元素是唯一且有序的,这个有序指的是存放元素时按照输入的顺序。在底层的实现上除了哈希表之外,还维护了一个元素的顺序链表,这个链表将存放的元素按照存放顺序链接起来。
      3. TreeSet(底层是红黑树)存放的元素是唯一有序的。这个有序指的是进行遍历时会按照二叉树的遍历方式进行排序。二叉树本来就是有序的,怎么保证存放的元素时有序的呢?要求存放的元素必须实现内部比较器接口Comparable接口并实现compareTo方法或者实现外部比较器接口Comparator,并重写compare方法。
    3. Map接口的主要实现有:HashTable,HashMap,TreeMap。其中HashTable是线程安全的,HashMap和TreeMap是线程不安全的。
      1. HashTable使用时不能存放值为Null的key,但是HashMap可以存放,且只能存放一个。
      2. HashMap按照键值对的方式存储数据。底层实现是数组+链表,对于存放的key而言必须重写hashCode方法和equals方法。
      3. LinkedHashMap是HashMap的子类,在实现上还维护了一个元素的顺序链表,链表将存放的元素按照顺序链接起来。
      4. TreeMap

标签:面试题,JAVA,HashMap,实现,元素,基础,接口,链表,存放
From: https://www.cnblogs.com/private-chen/p/17264612.html

相关文章

  • 分布式与微服务面试题
    分布式与微服务面试题说说你对分布式事务的理解?本地事务需要满足四大特性:原子性一组操作,要么全部成功,要么全部失败,不能有部分成功部分失败的情况。一致性数据从一......
  • 【THM】DNS in detail(DNS基础详解)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/dnsindetail本文相关内容:了解DNS协议是如何工作的,以及DNS如何帮助我们访问互联网服务。什么是DNS?DNS指D......
  • 机器学习基础06DAY
    模型检验-交叉验证一般在进行模型的测试时,我们会将数据分为训练集和测试集。在给定的样本空间中,拿出大部分样本作为训练集来训练模型,剩余的小部分样本使用刚建立的模型进......
  • 一、初识Java
    学习目标了解Java语言的特点掌握Java环境变量的配置熟悉Java的运行机制掌握Eclipes/Idea开发工具的使用是计算机、移动设备、家用电器等领域最受欢迎的开发语言之一......
  • java reflection exception--can not access a member of class XXX with modifiers "
    lookatthesampleprogrambelow.ItworkswhenIrunit.Field[]fields=reflectAllFields(parameter);for(Fieldfield:fields){if("createTime".equa......
  • Java调度框架Quartz 2.2.1
    Java调度框架Quartz2.2.1Java调度框架Quartz2.2.1版在前不久发布了,Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Ja......
  • Java 7如何操纵文件属性
    Java7如何操纵文件属性作者:chszs,转载需注明。准备写点基础性的文章,Java7已经出来很长一段时间了,但是很多Java程序员仍然停留在早期的Java5或Java6的基础上,对Java7的新......
  • Java 8实现BASE64编解码
    Java8实现BASE64编解码作者:chszs,转载需注明。Java一直缺少BASE64编码API,以至于通常在项目开发中会选用第三方的API实现。但是,Java8实现了BASE64编解码API,它包含到java.ut......
  • JavaScript基础
    1.引入jshttps://www.w3cschool.cn/javascript/用script标签,在其中写js代码<scriptsrc="JS/style.js"></script>Numberjs不区分小数和整数NaN表示不是一......
  • linux shell基础--终端显示字体背景和字体颜色\033[0;30m
    ANSI标准ANSI标准规定了一种所有终端共享的指令集,并要求用ASCII的数字字符传递所有数值信息,用于控制linux终端上的光标位置、颜色和其他选项。在文本中嵌入确定的字节序列......