企业真题(常用类与基础API、集合框架)

二、企业真题

2.1 String

1. 以下两种方式创建的String对象有什么不同?(*团)
String str = new String("test");

String str = "test";

2. String s = new String(“xyz”);创建了几个String Object? (新*陆)

两个

3. String a=“abc” String b=“a”+“bc” 问a==b?(网*邮箱)

是!

4. String 中 “+” 怎样实现?(阿*)

常量 + 常量 :略

变量 + 常量 、变量+变量:创建一个StringBuilder的实例,通过append()添加字符串,最后调用toString()返回一个字符串。(toString()内部new 一个String的实例)

5. Java中String是不是final的?(凡*科技)
类似问题:
> String被哪些类继承?(网*邮箱)
> 是否可以继承String类?(湖南*利软件)
> String 是否可以继承?(阿*)

6. String为啥不可变,在内存中的具体形态?(阿*)

规定不可变。

String:提供字符串常量池。

7. String 可以在 switch中使用吗?(上海*睿)

可以。从jdk7开始可以使用

8. String中有哪些方法?列举几个(闪*购)

。。。

9. subString()到底做了什么?(银*数据)

String str = “hello”;

String subStr = str.subString(1,3); //底层是new的方式返回一个subStr,实体内容是"el"

2.2 String、StringBuffer、StringBuilder

1. Java中操作字符串有哪些类?他们之间有什么区别。(南*电网)
类似问题:
> String 和 StringBuffer区别?(亿*国际、天*隆、*团)
> StringBuilder和StrignBuffer的区别?(平*金服)
> StringBuilder和StringBuffer的区别以及实现?(*为)
> String:不可变的字符序列;底层使用char[] (jdk8及之前),底层使用byte[] (jdk9及之后)
> StringBuffer:可变的字符序列;JDK1.0声明,线程安全的,效率低;底层使用char[] (jdk8及之前),底层使用byte[] (jdk9及之后)
> StringBuilder:可变的字符序列;JDK5.0声明,线程不安全的,效率高;底层使用char[] (jdk8及之前),底层使用byte[] (jdk9及之后)
2. String的线程安全问题(闪*购)

线程不安全的

3. StringBuilder和StringBuffer的线程安全问题(润*软件)

StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

二、企业真题

2.1 集合概述

1. List,Set,Map是否继承自collection接口?(北京中*译咨询、思*贸易)

Map不是。

2. 说说List,Set,Map三者的区别(民*银行)
类似问题:
> Map与Set、List的区别(纬*)

1、List、Set都是继承自Collection接口,Map则不是

2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)

3、Set和List对比:

Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

4、Map适合储存键值对的数据

5、线程安全集合类与非线程安全集合类 :

LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。

3. 写出list、map、set接口的实现类,并说出其特点(华**为)
类似问题:
> 集合有哪些, 各自有哪些特点, 各自的API有哪些?(湖**利软件)
> List Map Set三个接口在存储元素时个有什么特点(*软)

List:

允许重复的对象
可以插入多个 null 元素
是有序容器,保持了每个元素的插入顺序
常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList,它提供了使用索引的随意访问,LinkedList 更合适经常添加或删除元素的场景

Set:

不允许重复对象
只允许一个 null 元素
Set 接口最常用的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。HashSet 基于 HashMap 实现;LinkedHashSet 按照插入排序;TreeSet 通过 Comparator 或 Comparable 接口实现排序

Map:

是单独的顶级接口,不是 Collection 的子接口
Map 的 每个 Entry 都持有两个对象,key 和 value,key 唯一,value 可为 null 或重复
Map 接口常用的实现类有 HashMap、LinkedHashMap、Hashtable 和 TreeMap
Hashtable 和 未指定 Comparator 的 TreeMap 不可为 null;HashMap、LinkedHashMap、指定 Comparator 的 TreeMap 的 key 可以为 null

4. 常见集合类的区别和适用场景(饿**)

1、List,Set都是继承自Collection接口,Map则不是

2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)

3.Set和List对比:
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

4.Map适合储存键值对的数据

5.线程安全集合类与非线程安全集合类
LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。

5. 集合的父类是谁?哪些安全的?(北京中**信)

集合有两大父类,分别是Collection 和 Map。 不安全:ArrayList、HashMap、HashSet ; 安全:Vector、Hashtable

6. 集合说一下哪些是线程不安全的(*科软)

7. 遍历集合的方式有哪些?(恒*电子)
  • 迭代器Iterator用来遍历Collection,不能用来遍历Map!

  • 增强for

  • 一般的for:可以用来遍历List

2.2 List接口

2. ArrayList与LinkedList区别?(O**O、滴*、汇*天下、拓*软件、博纳**软件、上海*进天下,北京永生**信息、*联、在*途游)
类似问题:
> ArrayList跟LinkedList的区别详细说出?(阿*校招、*东)

5.1 以下情况使用 ArrayList
频繁访问列表中的某一个元素。
只需要在列表末尾进行添加和删除元素操作。
5.2 以下情况使用 LinkedList
你需要通过循环迭代来访问列表中的某些元素。
需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

3. ArrayList与Vector区别呢?为什么要用ArrayList取代Vector呢?(湖**利软件)

Vector效率低。

4. Arraylist 是有序还是无序?为什么?(蜜*信息)

有序;底层使用数组:Object[]

2.3 Set接口

2. List集合和Set集合的区别?(亚*科技、*海*翼科技,*华电*系统,达*贷)

3. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?(鸿*网络)
类似问题:
> 1.HashSet如何检查重复(创*科技)
> 3.Set使用哪个区分不能重复的元素的?(北京创**荣信息)

hashCode() 、 equals()

4. TreeSet两种排序方式在使用的时候怎么起作用?(拓*软件)

在添加新的元素时,需要调用compareTo() 或 compare()

5. TreeSet的数据结构(*米)

红黑树

2.4 Map接口

1. 说一下Java的集合Map有哪些Map?(奥*医药)

HashMap,LinkedHashMap,Hashtable, 详解Map集合

2. final怎么用,修饰Map可以继续添加数据吗?(*深蓝)

final HashMap map = new HashMap();

map.put(“AA”,123);

可以!

3. Set和Map的比较(亚*科技)

HashSet底层就是HashMap

LinkedHashSet底层就是LinkedHashMap

TreeSet底层就是TreeMap

4. HashMap说一下,线程安全吗?(*米)
类似问题:
> HashMap为什么线程不安全?(微*银行)
> HashMap是线程安全的吗?为什么不安全?(*团、*东、顺*)

不安全

5. HashMap和Hashbable的区别?(银*数据、阿**巴芝麻信用、*众银行、爱*信、杭州*智公司)
类似问题:
> HashMap 和 HashTable 有什么区别,以及如何使用,以及他的一些方法?(阿*校招、*东、*度校招、顺*)
  • 线程安全性–同步(synchronization),
  • 键值是否允许为null,
  • 类继承,
  • 初始化及扩容
  • 迭代器以及速度。
6. Hashtable是怎么实现的,为什么线程安全?(迪*创新)

数组+单向链表;底层方法使用synchronized修饰

7. HashMap和LinkedHashMap的区别(北京*晨阳光)

插入顺序:HashMap 存储元素的顺序是无序的,而 LinkedHashMap 则是按照插入顺序存储元素的。
性能:由于需要维护一个链表,LinkedHashMap 在性能上略微慢一些,但通常差别不大。在性能要求较高的场合下建议使用 HashMap。
内存消耗:LinkedHashMap 在内存占用上比 HashMap 稍微多一点,因为需要存储额外的链表信息。
总之,我们可以根据具体的应用场景选择合适的 Map 实现类。如果不考虑遍历顺序且需要最快的查找性能,则使用 HashMap,如果需要保持元素的插入顺序,则使用 LinkedHashMap。

8. HashMap 和 TreeMap 的区别(度,太极*、*线途游、阿*校招)

底层的数据结构截然不同。

9. HashMap里面实际装的是什么?(惠*)

JDK7:HashMap内部声明了Entry,实现了Map中的Entry接口。(key,value作为Entry的两个属性出现)

JDK8:HashMap内部声明了Node,实现了Map中的Entry接口。(key,value作为Node的两个属性出现)

10. HashMap的key存储在哪里?和value存储在一起吗?那么value存储在哪里?说具体点?(湖**利软件、天*伟业)

数组+链表+红黑树。 key、value作为Node的属性出现

11. 自定义类型可以作为Key么?(阿*)

可以! 要重写hashCode() 和equals()

Collections

3. ArrayList 如何实现排序(阿*)

Collections.sort(list) 或 Collections.sort(list,comparator)

4. HashMap是否线程安全,怎样解决HashMap的线程不安全(中*卫星)
类似问题:
> 怎么实现HashMap线程安全?(*团、*东、顺*)

其实Collections与Collection最本质的区别就在于,一个是类,一个是接口;而且它们之间的关系是,一个是工具,一个是被操作者。

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值