java集合框架笔记

博客围绕Java展开,探讨数组优缺点,详细介绍Collection、List、Set、Map等集合的关系、特点,如ArrayList、LinkedList、HashSet等。还涉及哈希表工作原理、泛型作用等知识,同时包含集合与数组比较及hashcode、equals相关面试题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 数组优点和缺点?

优点:依照索引查询效率高

缺点:长度在初始化时固定,且固定不变

删除和添加效率低下

无法直接保存映射关系

缺乏封装,操作繁琐

  1. Collection、List、Set、Map的关系及特点

都是接口

Collection  接口,存储一组无序,不唯一的对象

List 接口,存储一组有序(索引顺序),不唯一的对象

Set  接口,存储一组唯一,无序的对象

Map 接口存储一组键值对象,提供key到value的映射

  --key  唯一 无序

  --value 不唯一  无序

  1. ArrayList的特点是什么?

在内存中分配连续的存储空间,实现了长度可变的数组(本质是可变长度数组)

优点:遍历元素和随机访问元素(按索引)的效率比较高

缺点:添加和删除需大量移动数据,效率低下,按照内容查询效率低

  1. LinkedList的特点是什么?相对ArrayList,它有哪些特有的方法?

有序,不唯一(可重复)

采用链表存储方式

增加了首尾相关的操作,first和last

  1. Set集合有什么特点?

无序,唯一(不重复)

  1. HashSet有什么特点?

采用hashtable    哈希表存储结构

优点是添加、查询、删除速度快

缺点是无序

  1. 哈希表的工作原理?

调用hashCode()获取哈希码x

执行表达式y=k(x)=x%11 ,其中x是哈希码,y存储位置

  1. LinkedHashSet有什么特点?为什么有序?

采用哈希表存储结构,同时使用链表维护次序

有序(添加顺序)

LinkedHashSet 继承 HashSet   没有特殊的方法

  1. TreeSet有什么特点?为什么有序?

数据结构:二叉树(中序遍历)

TreeSet有序,并且是数据的大小顺序

内部比较器 实现接口 Comparable 见代码

  1. TreeSet存储自定义数据类型数据,会报ClassCastException,如何解决?

让Student类实现Comparble接口,重写compareTo()

实现Comparble接口 内部比较器

实现Comparator接口,外部比较器 可以采用匿名内部类

  1. 什么时候需要重写hashCode方法?

使用HashTableHashMapHashSet

  1. Map集合有什么特点?

key-value映射  键值对

  1. HashMap、LinkedHashMap、TreeMap各自有什么特点?

HashMap

 Key   无序  唯一 (Set)

 Value 无序  不唯一 (Collection)

LinkedHashMap

有序的HashMap   速度快

TreeMap

有序   速度没有hash快

  1. 哈希表有哪些数据结构?(百度扩展)

15、Collection和Collections有什么区别?

Collection是Java提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口List和Set。

Collections类,专门用来操作集合类 ,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

16、for-each的特点及缺点?

优点:

遍历的时候更加简介,特别是遍历Map集合的时候

效率和for循环相同

不用关心集合下标的问题,减少的出错率

缺点:

不能同时遍历多个集合

在遍历的时候无法删除和修改集合数据

  1. Iterator的特点

Iterator在遍历元素过程中,有线程修改集合元素会有ConcurrentModificationEception异常

Iterator本身不具有装载数据功能,需依附Collection对象使用

next()是用游标指向的方式返回下一个元素的

  1. 泛型的作用?

1.类型安全

泛型的主要目标是提高 Java 程序的类型安全。编译时的强类型检查;通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

2.消除强制类型转换

泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

3.更好的代码复用性

19、Vector和ArrayList的联系和区别

实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以互用。

Vector是早期JDK类,ArrayList是替代Vector的新类

Vector线程安全(同步),ArrayList重速度轻安全,线程非安全

长度需增长时,Vector默认增长一倍,ArrayList增长50%

20、集合和数组的比较

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

1:数组的按索引查询效率高于集合类。

2:数组能存放基本数据类型和对象,而集合类中只能放对象。

3: 数组容量固定且无法动态改变,集合类容量动态改变。

4:数组无法判断其中实际存有多少元素,length只告诉了array容量

5:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式

6:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率。

  1. ArrayList和LinkedList 的联系和区别

都实现了List接口

有序  不唯一(可重复)

ArrayList

在内存中分配连续的空间,采用了顺序表结构,实现了长度可变的数组

优点:遍历元素和随机访问元素的效率比较高(通过索引)

缺点:添加和删除需大量移动元素效率低,按照内容查询效率低

LinkedList

采用链表存储方式。

缺点:遍历和随机访问元素效率低下

优点:插入、删除元素效率比较高(但是前提必须先以低效率查询才可。如果插入删除发生在头尾可以减少查询次数)

增加了首尾相关的操作

  1. HashMap和Hashtable的联系和区别

实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用

两者的主要区别如下

Hashtable是早期JDK提供的集合类,HashMap是新版JDK提供的集合类

Hashtable继承Dictionary类,HashMap继承AbstractMap<K,V>实现

两者都实现了Map接口

Hashtable线程安全(速度慢),HashMap 非线程安全(速度快)

Hashtable不允许null值,HashMap允许null值(不建议)

23、hashcode相等两个类一定相等吗?equals呢?相反呢?(面试题)

(4)面试题:hashcode相等两个类一定相等吗?equals呢?相反呢?_依本多情的博客-优快云博客_hashcode相等

  1. Entry接口的特点

EntryMap的内部接口,用于存储键值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值