Java基础面试题16-23

本文详细对比了HashMap与Hashtable的六大关键差异,包括线程安全、null值处理、遍历方式、初始化容量、hash算法及性能考量。进一步探讨了HashMap与TreeMap的选择策略,以及ArrayList、LinkedList和Vector的特点与适用场景。最后,介绍了数组与List的转换方法,线程安全的集合类,Iterator的使用及其特性,如何确保集合不可修改,以及Queue中remove与poll方法的区别。

Java基础面试题之三

16.HashMap 和 Hashtable 有什么区别?

1.继承的父类不同
HashMap的父类的AbstractMap,Hashtable的父类是Dictionary:
同时都实现了接口 Map Colone Serilareable

2.null值不同
hashtable中的key和value都不允许为null
HashMap,key值允许一个为null,value可以多个为null值
如果通过get方法获取到的值为null,要不key值为null,要不然就是value值为null
想判断元素,可以通过constainsKey()来进行判断

3.安全性
hashtable是线程安全的
HashMap是线程不安全的,但是效率比Hashtable要高,如果想使用线程安全Map,
使用ConcurrentHashMap,线程安全的,效率是HashMap的几倍
4.遍历方式:
都可以采用迭代器进行遍历,但是hashtable可以使用Enumation()方法进行遍历数据
HashMap在迭代的时候,采用的是Iteator fial-fash机制,在遍历某一个数据的时候,另外一个线程
对象HashMap中的数据,进行(添加 修改,删除),会出现ConcurrentModifyException,但是调用
remover()不会报这个异常,不是每次都会出现这.个异常的

5.初始化容量
hashtable:的初始化容量是11,每次扩容 2N+1
hashMap:初始化容量是12,每次扩容是原来的两倍

6.hash算法不同
hashtable:hash算法计算hashcode值的方法是 地址值或者字符串等对某个数除得到hashcode结果,效率低
hashMap:计算hashcode的方法是取模,这样可以采用位运算,效率比hashtable的除高很多

17.如何决定使用 HashMap 还是 TreeMap?

HashMap:因为采用的时候hash算法,散列存储,所以查找某个数据比较快
TreeMap:插入,删除数据快 用treeMap

18.ArrayList 和 LinkedList 和Vectory 的区别是什么?

  • ArrayList:底层采用的数字,插入和删除数据慢,查询数据快,线程不安全的

  • linkedList:底层采用的双向链表,查询慢,插入和删除数据快,线程不安全的

  • vector:底层采用数组进行存储,插入删除数据慢,查询快,线程安全的

    总结:在ArrayList和LinkedList之间的区别是 LinkedList更占内存,因为在链表中存储一个数据是以一个节点(一个元素,一个地址)的形式

19.如何实现数组和 List 之间的转换?

  • 数组转换成list:Arrays.asList(数组)
  • list转换成数组:Arrays.toArray(list.size);

20.哪些集合类是线程安全的?

	线程安全的集合类:
  • 1.StringBuffer
  • 2.vector
  • 3.hashtable

21.Iterator 是什么? 怎么使用?有什么特点?

  • 1.Iterator:是迭代Collection集合中的数据的一个迭代器,它不能自己实列化,只能通过集合调用集合的内部类进行实列化
    所以,只能依赖于集合一起使用:

  • 2 特点:
    1.Iterator遍历集合元素的时候,不允许其他线程对集合中的元素进行修改,否则会抛出
    concurrentModifactionException 异常
    2.在集合中调用remove()方法不会抛出concurrentModifactionException 异常

    3.迭代器必须依赖于Collection集合而存在

22.怎么确保一个集合不能被修改?

通过调用UnModifyableMap(map) 方法返回的集合 就不能被修改
List:UnModifyableList(map)
List:UnModifyableSet(map)

23.Queue 中 remove() 和 poll()有什么区别?

remove()和poll()方法:都会删除队列中第一个元素,但是当队列为空时

  • remove():会抛出 NoSuchElementExceptin异常
  • poll():只会返回一个null值
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值