Java常考面试题(六)

简介: 这系列文章拖了有好几天了,今天继续吧,干了什么呢,自己也不知道,继续前进吧。不管做什么,学习总是有所帮助。

      序言

         这系列文章拖了有好几天了,今天继续吧,干了什么呢,自己也不知道,继续前进吧。不管做什么,学习总是有所帮助。

                                              --WZY

一、HashMap和Hashtable有什么区别?

      自我解答:

            HashMap:都实现了Map接口,是非线程安全的

            Hashtable:实现了Map接口,线程安全

      参考答案:

            HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点:
            HashMap允许键和值是null,而Hashtable不允许键或者值是null。
            Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
            HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。
            一般认为Hashtable是一个遗留的类。

      自我评价:

            1、同步与非同步

                HashMap是非同步的、而HashTable是同步的

            2、键和值为null

                HashMap的key和value可以为null、而HashTable不同

            3、一般认为hashTable是一个遗留的类,也就是说不用了,原因其实跟为什么不用vector一样,加锁的机制很多时候越显得多余

二、数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?

       自我解答:

            Array:一个固定大小的数组,存储的类型需先设定,初始化必需给定大小

            ArrayList:一个能够自动扩增大小的顺序表,底层也是数组,初始化的时候,大小为0,可以使用泛型

            在不确定一个数据的大小、并且需要使用泛型的时候使用ArrayList。

  

       参考答案:

            下面列出了Array和ArrayList的不同点:
              1、Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
              2、Array大小是固定的,ArrayList的大小是动态变化的。
              3、ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
              4、对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。 

        

       自我评价:

            array:能使用基本数据类型和引用数据类型,而ArrayList只能使用引用数据类型

            array:只能一个个增加元素,不能一次性增加多个元素,而arrayList有这种方法。arrayList有更多的方法,

            对于什么时候用数组和ArrayList。我觉得在一般复杂一点的情况下都会用arrayList,选择使用数组来存储的比较少,除非非常简单的存储。

三、ArrayList和LinkedList有什么区别?

      自我解答:

            1、ArrayList是随机存取,LinkedList是顺序存取

            2、ArrayList的底层是数组,数据结构为顺序表、LinkedList使用的数据结构是双向链表

            3、ArrayList在数据的查询方面性能好,而对数据的增删操作性能差,而LinkedList恰恰相反

            4、ArrayList在使用查询时,使用for循环比较好,而LinkedList使用Iterator好

            5、都实现了list接口

      参考答案:

            ArrayList和LinkedList都实现了List接口,他们有以下的不同点:
            ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它              的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
              相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
              LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
              也可以参考ArrayList vs. LinkedList。

      自我评价:

          忘了这亮点。

           1、linkedList比较占内存,应该LinkedList存放一个元素就存储了两个引用。

           2、arrayList的容量有上限,而LinkedList没有。

      

四、Comparable和Comparator接口是干什么的?列出它们的区别。

     自我解答:

           这个不清楚,学习

     参考答案:

           Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对              象。
           Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参              数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相             同的时候,这个方法才返回true。

     自我评价:

           个人感觉参考答案也不是给的很让人理解,给个参考博文http://blog.csdn.net/mageshuai/article/details/3849143

          1、使用Comparator是使用了策略模式,而使用Comparable是在实现该接口的内部实现方法,而策略模式是在外部实现方法,所以有的地方就说一个是在外部实现,而另一个是在内部实现的意思就是这个。

          2、Comparator中有两个方法,compareTo()和equals 而Comparable接口只有一个compareTo()方法

          3、两种接口看你怎么使用,Comparable是一个对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作),是内部定义的排序,在这些支持字比较的类就实现这个Comparable接口,但是如果觉得自比较这个比较行为远远不够你的需求,那么你就实现Comparator接口,将所有需要的比较行为的写成一个个类,都实现该Comparator接口,你就在你的类中申明Comparator接口的变量,然后需要用那个比较行为,就new那个比较行为,这就是策略模式。复用性比较高。(前两天才学的策略模式,今天就用到了,真高兴我会这个。)

五、什么是Java优先级队列(Priority Queue)?

    自我解答:

          。。。,又不会。要开始看数据结构才能解答这些题目了。

    参考答案:

          

相关文章
|
1月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
4月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
261 0
|
4月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
274 3
|
12天前
|
设计模式 缓存 安全
提供一些准备Java八股文面试的建议
准备Java八股文面试需系统梳理核心知识点,涵盖Java基础、集合、多线程、JVM、设计模式及主流框架。重在理解原理而非死记硬背,结合源码与实际场景深化认知。通过思维导图构建知识体系,分模块刷题并模拟面试表达,关联项目经验,体现应用能力。关注Java新特性与技术演进,避免知识过时。最终实现从“背答案”到“懂原理、能实战”的转变,提升综合竞争力。(238字)
113 7
|
3月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
369 0
|
3月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
161 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
1月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
4月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
2357 48
|
4月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
136 5
|
4月前
|
Java API 微服务
2025 年 Java 校招面试全攻略:从面试心得看 Java 岗位求职技巧
《2025年Java校招最新技术要点与实操指南》 本文梳理了2025年Java校招的核心技术栈,并提供了可直接运行的代码实例。重点技术包括: Java 17+新特性(Record类、Sealed类等) Spring Boot 3+WebFlux响应式编程 微服务架构与Spring Cloud组件 Docker容器化部署 Redis缓存集成 OpenAI API调用 通过实际代码演示了如何应用这些技术,如Java 17的Record类简化POJO、WebFlux构建响应式API、Docker容器化部署。
205 5