java面试题02

1.String、StringBuffer、StringBuilder之间的区别?

1.可变与不可变
String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。
2.是否多线程安全
String中的对象是不可变的,也就可以理解为常量,显然线程安全。
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

2. error和exception的区别?

 Exception和Error都是继承了Throwable类。
Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应的处理。
Error是指正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序(比如JVM自身)处于非正常状态,不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如OutOfMemoryError之类,都是Error的子类。

3.异常的分类?有什么区别?

运行时异常都是RuntimeException类及其子类异常。
这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。
对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。

4.异常的处理方式有哪些?

 1、使用throws关键字,声明异常,交给方法的调用者处理
只能解决编译期异常
2、捕获异常try......catch
既可以解决编译期异常,还可以处理运行时异常。

 5.集合和数组的区别?

数组不是面向对象的,存在明显的缺陷(长度固定),集合完全弥补了数组的一些缺点,比数组更灵活更实用,可大大提高软件的开发效率而且不同的集合框架类可适用于不同场合。

总结:
1、长度
数组长度固定不变,集合长度是可变的。
2、类型
数组是数组类型,集合是接口和实现类的类型。
3、面向对象
数组是不面向对象的,集合是面向对象的。

6.List、Set、Map区别是什么?

List:1.可以允许重复的对象。
  2.可以插入多个null元素。
     3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
     4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

Set:1.不允许重复对象
   2. 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator  或者 Comparable 维护了一个排序顺序。
        3. 只允许一个 null 元素
        4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。
 
Map:每个元素是键值对。  
1.Map不是collection的子接口或者实现类。Map是一个接口。
2.Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。
3. TreeMap 也通过 Comparator  或者 Comparable 维护了一个排序顺序。
4. Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
5.Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)        

我的总结:
List和Set都是Collection集合。
Collection集合特点:每个元素可以存储一条信息,值。
Map集合特点:每个元素可以存储两条信息,键值对。

List集合的特点:有序的集合,元素有下标,从0开始。可以存储重复的元素。
Set集合的特点:无序的集合。不可以存储重复的元素。

7.List常用实现类有哪些?区别是什么?

ArrayList采用数组的结构存储元素,查询比较快,增删改较慢。线程不安全,效率高。

Vector采用数组的结构存储元素,查询比较快,增删改较慢。线程安全,效率低。

LinkedList采用链表结构存储元素,查询较慢,增删改较快。线程不安全,效率高。

8.Set集合的实现类有哪些?区别是什么?

HashSet
HashSet有以下特点
 不能保证元素的排列顺序,顺序有可能发生变化
 不是同步的
 集合元素可以是null,但只能放入一个null
当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。
简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等
注意,如果要把一个对象放入HashSet中,重写该对象对应类的equals方法,也应该重写其hashCode()方法。其规则是如果两个对 象通过equals方法比较返回true时,其hashCode也应该相同。另外,对象中用作equals比较标准的属性,都应该用来计算 hashCode的值。

LinkedHashSet
LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

TreeSet类
TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。
TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0

9. Map集合的实现类有哪些?区别是什么?

HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。为了优化HashMap空间的使用,您可以调优初始容量和负载因子。
(1)HashMap(): 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap
(2)HashMap(Map m): 构造一个映射关系与指定 Map 相同的新 HashMap
(3)HashMap(int initialCapacity): 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap
(4)HashMap(int initialCapacity, float loadFactor): 构造一个带指定初始容量和加载因子的空 HashMap

HashTable:实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值,即不允许null键null值。
(1)Hashtable(): 用默认的初始容量 (11) 和加载因子 (0.75) 构造一个新的空哈希表
(2)Hashtable(Map m): 构造一个与给定的 Map 具有相同映射关系的新哈希表
(3)Hashtable(int initialCapacity): 用指定初始容量和默认的加载因子 (0.75) 构造一个新的空哈希表
(4)Hashtable(int initialCapacity, float loadFactor): 指定初始容量和指定加载因子构造一个新的空哈希表

TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。不允许null键,允许null值。
(1)TreeMap():使用键的自然顺序构造一个新的、空的树映射
(2)TreeMap(Map m): 构建一个映像树,并且添加映像m中所有元素
(3)TreeMap(Comparator c): 构建一个映像树,并且使用特定的比较器对关键字进行排序
(4)TreeMap(SortedMap s): 构建一个映像树,添加映像树s中所有映射,并且使用与有序映像s相同的比较器排序

三种常规Map性能:
HashMap:适用于在Map中插入、删除和定位元素。
HashTable:单线程环境下,性能低,适用于完全的线程安全。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

总结:
HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap,仅在你需要完全的线程安全的时候使用Hashtable。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值