JAVA基础面试题
1、请说说Java中的集合类,项目中是怎么使用的?
- Java集合主要是Collection接口和Map接口,以及它们的子接口和实现类。
- Collection接口下有子接口List和Set。
- List接口的实现类主要有ArrayList,Vector,LinkedList。
- ArrayList线程不安全,底层实现是一个Object类型的动态数组。存放的元素是有序的,但是可以重复。ArrayList在逻辑上是顺序结构,所以查询速度快,但是对数据的新增和删除效率低。在jdk1.7中,ArrayList的初始化长度是10,jdk1.8中初始化长度为0。当需要扩容时,是按照原长度的1.5倍进行扩容的。扩容时会复制旧的数据到新的数组中,并将引用指向新的数组。
- Vector是线程安全的容器。Vector里面的方法都用synchronized关键字修饰的。底层实现上也是一个Object类型的数组,初始化长度为10,扩容时按照2倍进行扩容。
- LinkedList实现上双向链表。存放数据时是包装成节点对象存储的,一个节点中除了存放元素之外,还有两个分别指向前一个节点和后一个节点的指针,所以对于LinkedList而言遍历查询效率低,但是对于插入和删除的效率高。
- Set接口的实现类主要有HashSet,TreeSet,LinkedHashSet,这三个都是线程不安全的。
- HashSet存放的元素是唯一且无序的,无序指的是存放元素时不会按照输入的顺序存放,遍历时也不会按照升序或者降序来排列。底层实现上是哈希表,这样就要求存放的元素必须重写equals和hashCode方法。
- LinkedHashSet继承了HashSet,存放的元素是唯一且有序的,这个有序指的是存放元素时按照输入的顺序。在底层的实现上除了哈希表之外,还维护了一个元素的顺序链表,这个链表将存放的元素按照存放顺序链接起来。
- TreeSet(底层是红黑树)存放的元素是唯一有序的。这个有序指的是进行遍历时会按照二叉树的遍历方式进行排序。二叉树本来就是有序的,怎么保证存放的元素时有序的呢?要求存放的元素必须实现内部比较器接口Comparable接口并实现compareTo方法或者实现外部比较器接口Comparator,并重写compare方法。
- Map接口的主要实现有:HashTable,HashMap,TreeMap。其中HashTable是线程安全的,HashMap和TreeMap是线程不安全的。
- HashTable使用时不能存放值为Null的key,但是HashMap可以存放,且只能存放一个。
- HashMap按照键值对的方式存储数据。底层实现是数组+链表,对于存放的key而言必须重写hashCode方法和equals方法。
- LinkedHashMap是HashMap的子类,在实现上还维护了一个元素的顺序链表,链表将存放的元素按照顺序链接起来。
- TreeMap
posted @
2023-03-28 11:50
骑马观花
阅读(
21)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异