5.JAVA基础面试题:集合

五.JAVA基础面试题:集合


1.List,Set,Queue和Map的区别

2.为什么要使用集合

3.ArrayList和Vector的区别

4.ArrayList和linkedlist的区别

5.ArrayList的扩容机制

6.comparable和comparator的区别

7.如何理解无序性和不可重复性

8.Hashset,Linkedhashset和Treeset异同


1.Hashmap和HashTable的区别

2.Hashmap和HashSet的区别

3.Hashmap和treemap的区别

4.hashset如何检查重复

5.hashmap的底层实现

6.hashmap为什么要扩容为2的n次幂

7.concurrenthashmap和hashtable的区别

8.concurrenthahsmap的1.7和1.8的区别

五.JAVA基础面试题:集合


1.List,Set,Queue和Map的区别

  • List有序可重复
  • Set无序不可重复
  • Queue有序可重复(保存插入顺序)
  • Map键值对(key无序不可重复,value无许可重复)
  • List存储
    ArrayList object数组
    LinkedList 双向链表
    Vector object数组
  • Set存储
    HashSet HashMap
    LinkedHashSet LinkedHashMap
    TreeSet 红黑树
  • Map存储
    HashMap 数组+链表(数组+链表+红黑树)
    LinkedHashMap 数组+链表或红黑树(多了一层双向链表)
    HashTable 数组+链表。
    TreeMap 红黑树

2.为什么要使用集合/h1>

  • 数组:只能保存一组相同类型的数据
  • 集合:可以保存不同类型的数据,可以保存keyvalue并且定制需求

  • 键值对 Map,排序使用TreeMap,不用排序HashMap,线程安全用ConcurrentHashMap
    值 元素唯一且无序用Set,元素可重复且有序用List

3.ArrayList和Vector的区别

  • 底层都用object数组
  • ArrayList线程不安全,Vector线程安全

4.ArrayList和linkedlist的区别

  • 都是线程不安全
  • 存储 ArrayList用object数组,linkedlist用双向链表
  • 插入删除 前者在移动元素,后者在寻找位置
  • 快速访问 前者支持后者不支持
  • 空间 前者主要在预留空间,后者主要保存单个元素较大

5.ArrayList的扩容机制

  • jdk7 新new 长度+10,再扩1.5倍,复制返回
  • jdk8 新new 长度0,第一次add 长度+10,再扩1.5倍,复制返回

6.comparable和comparator的区别

  • conparable 是类实现接口后重写compareTo方法
  • comparator是使用collections.sort()第二个参数传入比较器

7.如何理解无序性和不可重复性

  • 无序性:不是随机存储,而是利用hashcode来寻找哈希表中的具体位置
  • 不可重复性:是利用equals和hashcode来确定数据的唯一性

8.Hashset,Linkedhashset和Treeset异同

  • 三者都是线程不安全,都保证数据唯一
  • 三者底层存储不同
    hashset 哈希表,不需要保证数据插入和取出的顺序
    linkedhashset 哈希表+链表,可以获得数据插入和取出的顺序,满足先进先出原则
    treeset 红黑树,可以定制排序

1.Hashmap和HashTable的区别

  • 线程安全:前者不安全,后者安全
  • 效率:前者更高
  • 对nullkey的nullvalue的支持:前者支持一个nullkey,多个nullvalue,后者不支持nullkey和nullvalue
  • 底层数据结构
    hashmap 数组+链表+红黑树
    hashtable 数组+链表
  • 扩容大小
    hashmap 16 扩容2n,自定义会扩容为2的n次幂
    hashtable 11 扩容2n+1,自定义则直接使用自定义

2.Hashmap和HashSet的区别

  • 键值对的区别
  • 一个是put,一个是add
  • 前者键计算hashcode,后者使用成员对象计算hashcode,用equals判断对象相等

3.Hashmap和treemap的区别

  • treemap多了元素键值排序和元素查询的能力

4.hashset如何检查重复

  • 先利用hashcode
  • 再利用equals

5.hashmap的底层实现

  • 1.8
    数组+链表
  • 1.8之后
    数组+链表+红黑树
    链表长度大于8:如果数组长度小于64,扩容数组,如果数组长度大于64,则将链表转化为红黑树

6.hashmap为什么要扩容为2的n次幂

  • 只有当length为2的n次幂的时候
    hash%length==hash&(length-1)
    即&效率比%高

7.concurrenthashmap和hashtable的区别

  • 底层数据结构
    concurrenthashmap:1.7采用分段的数组和链表,1.8采用node数组和链表和红黑树
    hashtable:数组和链表
  • 实现线程安全的方式
    concurrenthashmap:1.7采用每一把锁锁一段数组,1.8采用node+CAS+synchronized
    hashtable:使用synchronized线程安全,一个线程put,另一个线程无法put也无法get

8.concurrenthahsmap的1.7和1.8的区别

  • 线程安全实现
    1.7 segment分段锁
    1.8 node+cas+synchronized(只锁定链表或红黑树首节点)
  • 数据结构
    1.7 segment数组+链表
    1.8 node数组+链表+红黑树
  • 并发度
    1.7 默认为segment数组(16默认)
    1.8 node数组的大小

未更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值