首页 > 其他分享 >集合面试题

集合面试题

时间:2023-02-14 20:34:37浏览次数:40  
标签:面试题 Set HashMap ArrayList 元素 List 线程 集合

Collection:

①List:  Vector(Stack) ,   ArrayList ,  LinekdList 

②Set:  HashSet(LinkedHashSet) ,  TreeSet

③Queue:  PriorityQueue ,  ArrayDeque , LinekdList

Map:

HashMap , TreeMap  , HashTable(Properties)

2.Collection 和Collections 的区别?

Collection:

①是集合的顶级接口,定义了集合中统一的接口方法

②Collection接口有很多常用的实现类

③Collection的意义是为了具体的集合提供了最大化的统一操作方法

④其直接继承的接口有List和Set及Queue

Collections:

①集合的工具类

②提供了很多静态方法用于对集合元素进行排序,搜索及线程安全等操作

3.HashMap是线程安全的吗?如何得到一个线程安全的Map?

①HashMap线程不安全

②利用Collections工具类提供的synchronizedMap(map),利用装饰者设计模式,增强方法。

使用ConcurrentHashMap

HashTable

4.List和Set的区别?

①List

List:元素有序,可以通过索引获取元素,允许重复元素;底层通常是通过线性表(数组,链表)实现;

②Set

Set:元素无序,不可以通过索引获取元素,不允许重复;底层通常是通过二叉搜索树,hash表实现

5.HashMap 和Hashtable 的区别?

①Hashtable是线程安全的,HashMap线程不安全

②HashMap允许null键和null值,HashTable不允许

6.ArrayList和LinkedList的区别?

①ArrayList

ArrayList底层基于数组实现,采用动态扩容机制;

由于数组在内存中是连续的存储单元;所以在中间删除|插入元素比较慢;尾部却很快;

插入和删除的平均复杂度0(n)

根据索引查找的平均复杂度0(1)

②LinkedList

LinkedList底层基于双向非循环链表

由于双向链表可以从头部和尾部操作;所以在中间删除|插入元素比较慢;头部尾部比较快

插入和删除的平均复杂度0(n)

根据索引查找的平均复杂度0(n)

7.HashSet的实现原理

①、HashSet底层利用HashMap实现

②、HashSet中的元素存储在HashMap的key

③、HashMap的value统一采用: private static final Object PRESENT = new Object();

8.如何实现数组和List之间的转化

①、List转化为数组:toArray() T[]

②、数组转化为List:Arrays.asList(T...t) List<T>

9.ArrayList和Vector的区别

底层都是基于数组实现

①线程安全:

Vector是线程安全(synchronized)

ArrayList不是

如果需要一个线程安全的ArrayList,一般推荐CopyOnWriteArrayList

②扩容:

ArrayList扩容1.5倍

Vector默认扩容2倍

10.Queue中的peek()和poll()方法有什么区别

①peek()查看队列头部元素

②poll()出队

11.Iterator和ListIterator的区别

Iterator和ListIterator都是迭代器接口,不同的集合有不同的实现;ListIterator是Iterator的子接口

①Iterator可以遍历List也可以遍历Set,因为List和Set接口中都有:Iterator<E> iterator();

②ListIterator不能遍历Set,只有List接口中有:ListIterator<E> listIterator();

③Iterator只能向后遍历(hashNext,next),ListIterator不尽可以向后遍历,也可以向前遍历(hasPrevious,previous)

④Iterator中对集合元素的操作只有删除,ListIterator提供了获取前一个元素索引,后一个元素索引,添加元素,替换元素等方法

标签:面试题,Set,HashMap,ArrayList,元素,List,线程,集合
From: https://www.cnblogs.com/carney/p/17117671.html

相关文章

  • 热点面试题: Array中有哪些非破坏性方法?
    前言极度投入,深度沉浸,边界清晰前端小菜鸡一枚,分享的文章纯属个人见解,若有不正确或可待讨论点可随意评论,与各位同学一起学习~欢迎关注​​『前端进阶圈』​​公众号,一起探......
  • java面试题(七)
    1.21说一说hashCode()和equals()的关系参考答案hashCode()用于获取哈希码(散列码),eauqls()用于比较两个对象是否相等,它们应遵守如下规定:如果两个对象相等,则它们必须有相同的......
  • 【Python21天学习挑战赛】集合 & 数据类型补充
    开头一叙:无论是以后学习需要或者是三年后的工作需要,都需要用到python的工具,也接着这次活动的机会,把python系统的学一遍。跟着大佬,让python知识从入门到精通。文章目录​​......
  • 面试题,反射创建类实例的三种方式是什么
    1、获得Class:主要有三种方法:(1)Object-->getClass(2)任何数据类型(包括基本的数据类型)都有一个“静态”的class属性(3)通过class类的静态方法:forName(StringclassName)(最常用)publi......
  • 面试题 HashMap和HashTable有什么区别
    ......
  • 面试题如何实现一个IOC容器
     ......
  • 面试题 为什么用线程池?解释下线程池参数
     ......
  • 面试题 锁消除是什么
    锁消除是在编译器级别的事情。在即时编译器时,如果发现不可能被共享的对象,则可以消除这些对象的锁操作。也许你会觉得奇怪,既然有些对象不可能被多线程访问,那为什么要加锁呢?写......
  • 前端一面必会vue面试题总结
    Vue模板编译原理Vue的编译过程就是将template转化为render函数的过程分为以下三步第一步是将模板字符串转换成elementASTs(解析器)第二步是对AST进行静态节......
  • 前端二面经典vue面试题总结
    Vue加载流程1.初始化的第一阶段是Vue实例也就是vm对象创建前后:首先Vue进行生命周期,事件初始化发生在beforeCreate生命周期函数前,然后进行数据监测和数据代理的初始化,也就......