- 博客(7)
- 收藏
- 关注
原创 关于EntrySet
`Set` 的单列性:`Set` 的确只能存储单一类型的元素,但这个元素的类型本身可以是复合对象(例如 `Map.Entry`)。- 使用 `entrySet()` 返回 `Set` 而非 `List`,是为了在遍历键值对时利用 `Set` 的高效性和无重复特性。- `Set` 的单列性:`Set` 只能存储单一类型的元素,但元素的类型可以是复合对象(如 `Map.Entry`)。- 同理,`Map.Entry` 就像 `Member` 这个类,它把双列数据封装成一个对象,存入 `Set`。
2025-02-26 23:29:01
391
原创 Set集合
是一种不允许重复元素且不保证顺序(部分实现类会维护顺序)的集合。:需要去重且保留插入顺序的场景(如缓存记录顺序)。每次修改操作(增、删)会复制底层数组,性能较低。// 迭代顺序:Apple → Banana。:高并发环境下的读操作远多于写操作的集合。)非线程安全,需自行同步或使用并发集合。迭代器遍历的是创建时的快照,不会抛出。添加重复元素时,操作会被忽略(返回。时间复杂度),但迭代顺序不可预测。实现),通过哈希值快速定位元素。线程安全,适用于读多写少的场景。默认不保证元素的存储顺序(如。
2025-02-26 00:13:51
647
原创 Java中的并发修改检测机制
/ 初始化时与集合的 modCount 同步。// 直接调用集合的 remove 方法,导致 modCount++的字段(修改计数器),记录集合被结构性修改的次数(例如添加、删除元素、清空集合等)。若允许在遍历时随意修改集合,可能导致元素重复遍历、遗漏或逻辑错误(例如链表断裂)。如果需要遍历后统一修改,可以先将待操作元素存入临时集合,遍历结束后再处理。:优先使用迭代器自身的方法修改集合,或改用线程安全的并发集合类。如果不一致,说明集合在迭代过程中被外部修改,抛出异常。// 修改计数器递增。
2025-02-24 18:29:40
653
原创 ArrayList集合底层原理
继续添加到第 16 个元素 → 再次扩容到 22(15 × 1.5 = 22.5,向下取整为 22)。:扩容机制可能导致未使用的预留空间(如容量为 15,实际只存 11 个元素)。初始容量为 10,添加第 11 个元素时触发扩容 → 新容量为 15。但其插入/删除效率低的缺点,在需要频繁修改数据的场景下,可改用。创建一个新数组,并将旧数组数据复制到新数组中。:无需手动处理数组扩容,适合数据量不确定的场景。:通过索引直接访问元素,时间复杂度 O(1)。:底层数组实现 O(1) 的索引访问。
2025-02-24 16:20:11
719
原创 剖析数组(分析优缺点)
数组直接存储数据,无需像链表维护指针或对象头信息,内存利用率高。无法直接创建泛型数组(需通过强制类型转换),类型安全性不如集合框架。在数组中间增删元素时,需要移动后续元素(时间复杂度。没有内置方法支持搜索、排序等操作,需依赖工具类(如。只能存储单一类型元素(编译时检查),且数组类型是。:需直接操作内存或与底层API交互(如网络传输)。),语法直观,而集合框架需要嵌套(如。:如缓存、数学计算(矩阵运算)。:动态数组,自动扩容,支持泛型。),可能导致运行时错误(),避免自动装箱(如。),不如集合框架(如。
2025-02-24 14:52:14
216
原创 java中的迭代器注意事项及集合中的五种遍历方式
需要注意的是,虽然Map集合中的值可以通过键来访问,但这种访问方式并不是基于索引的。同样,Set集合中的元素也没有索引,通常需要使用迭代器或其他遍历机制来访问。在遍历过程中需要添加元素,使用列表迭代器(列表迭代器是list系列的独有的,set集合使用不了。如果遍历时想操作索引,可以使用普通for,普通for不能遍历没有索引的集合.仅仅想遍历,不需要增加或者删除,使用增强for或lambda表达式。在遍历过程中需要删除元素,使用迭代器进行删除。
2025-02-24 14:20:04
159
原创 java中的集合
因为Collection是一个接口,所以创建Collection的对象时使用多态的方法进行对象的创建。Collection是单列集合的顶层接口,所有方法被List和Set方法共享。其中包含一些匿名内部类的知识,没太搞懂希望大神指点。3.lambda表达式遍历。以及常用的三种遍历方式。
2025-02-24 10:29:10
144
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人