8、Java 集合框架体系深入详解

手把手教你用示波器搞定PCIe 5.0 REFCLK时钟信号测量(附完整参数解读) 本文详细介绍了如何使用示波器进行PCIe 5.0 REFCLK时钟信号测量,包括示波器与探头的选择、关键参数的测量方法及解读,以及实战中的常见问题与解决方案。通过手把手教学和完整参数解读,帮助硬件工程师高效完成时钟信号测量,确保系统稳定性。 阅读详情

开篇概览:Java 集合框架整体架构

Java 集合框架(Java Collections Framework, JCF)是 Java 标准库中用于存储和操作一组对象的核心工具集。它提供了一套高性能、高复用、类型安全的接口与实现类,极大简化了数据结构的使用。

集合框架主要分为两大体系:

  1. Collection 接口体系:用于存储单个元素的集合;

    • List:有序、可重复(如 ArrayList, LinkedList);
    • Set:无序、不可重复(如 HashSet, TreeSet);
    • Queue:队列(本章暂不展开)。
  2. Map 接口体系:用于存储键值对(Key-Value);

    • 如 HashMap, TreeMap, LinkedHashMap。

此外,还包括:

  • 迭代器(Iterator):统一遍历集合;
  • 工具类(Collections):提供排序、查找、同步等静态方法。

掌握集合框架,不仅能高效处理数据,还能理解其底层数据结构(数组、链表、哈希表、红黑树等)的设计思想。


一、Collection 接口体系

1.1 Collection 接口核心方法

所有集合类(除 Map)都实现 java.util.Collection 接口,提供统一操作:

boolean add(E e);           // 添加元素
boolean remove(Object o);   // 删除元素
int size();                 // 元素个数
boolean isEmpty();          // 是否为空
boolean contains(Object o); // 是否包含某元素
Iterator<E> iterator();     // 获取迭代器
void clear();               // 清空集合

二、List 接口及其实现

List 是有序、可重复的集合,支持通过索引访问元素。

2.1 ArrayList(基于动态数组)

✅ 特点:
  • 底层结构:Object[] 数组;
  • 查询快:O(1)(通过索引直接访问);
  • 增删慢:O(n)(需移动后续元素);
  • 线程不安全;
  • 自动扩容:默认初始容量 10,扩容为原容量的 1.5 倍。
📌 底层原理详解:
  • 当添加元素超过当前数组容量时,调用 grow() 方法:
    int newCapacity = oldCapacity + (oldCapacity >> 1); // 1.5 倍
    
  • 使用 System.arraycopy() 复制旧数组到新数组。
示例:ArrayList 使用
import java.util.*;

public class ArrayListDemo {
    public static void main(String[] args) {
        // 创建 ArrayList(初始容量默认为10)
        List<String> list = new ArrayList<>();

        // 添加元素(自动扩容)
        list.add("苹果");
        list.add("香蕉");
        list.add("橙子");
        System.out.println("列表内容: " + list); // [苹果, 香蕉, 橙子]

        // 通过索引访问
        System.out.println("第一个元素: " + list.get(0)); // 苹果

        // 在指定位置插入(后续元素后移)
        list.add(1, "葡萄");
        System.out.println("插入后: " + list); // [苹果, 葡萄, 香蕉, 橙子]

        // 删除元素(后续元素前移)
        list.remove("香蕉");
        System.out.println("删除后: " + list); // [苹果, 葡萄, 橙子]

        // 遍历(推荐使用增强 for 或 Iterator)
        for (String fruit : list) {
            System.out.println("水果: " + fruit);
        }
    }
}

2.2 LinkedList(基于双向链表)

✅ 特点:
  • 底层结构:双向链表(每个节点包含 prev、next、item);
  • 增删快:O(1)(只需修改指针);
  • 查询慢:O(n)(需从头/尾遍历);
  • 线程不安全;
  • 额外方法:addFirst()、addLast()、getFirst() 等(实现 Deque 接口)。
📌 底层原理详解:
  • 节点类定义:
    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;
        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }
    
  • 插入时只需调整前后节点指针,无需移动数据。
示例:LinkedList 使用
import java.util.*;

public class LinkedListDemo {
    public static void main(String[] args) {
        // 创建 LinkedList
        List<String> list = new LinkedList<>();

        // 添加元素
        list.add("A");
        list.add("B");
        list.add("C");

        // 使用 LinkedList 特有方法(需强转或声明为 LinkedList)
        LinkedList<String> linkedList = (LinkedList<String>) list;
        linkedList.addFirst("Head");   // 在头部添加
        linkedList.addLast("Tail");    // 在尾部添加

        System.out.println("链表内容: " + linkedList); // [Head, A, B, C, Tail]

        // 删除首尾元素
        System.out.println("移除头部: " + linkedList.removeFirst()); // Head
        System.out.println("移除尾部: " + linkedList.removeLast());  // Tail

        // 遍历
        for (String s : linkedList) {
            System.out.println("元素: " + s);
        }
    }
}
✅ ArrayList vs LinkedList 选择建议:
场景推荐
频繁随机访问(get/set)ArrayList
频繁在首尾增删LinkedList
内存敏感(LinkedList 节点多占内存)ArrayList

三、Set 接口及其实现

Set 是无序、不可重复的集合(基于 equals() 判断重复)。

3.1 HashSet(基于哈希表)

✅ 特点:
  • 底层结构:HashMap(JDK 8+ 为 数组 + 链表/红黑树);
  • 无序:元素顺序与插入顺序无关;
  • 查找/添加/删除:平均 O(1);
  • 允许一个 null 元素;
  • 线程不安全。
📌 底层原理详解(JDK 8+):
  • 使用 HashMap<E, Object> 存储,key 为元素,value 为固定 PRESENT 对象;
  • 哈希冲突时:
    • 链表长度 < 8:使用链表;
    • 链表长度 ≥ 8 且数组长度 ≥ 64:转为红黑树(提升查找效率);
  • 扩容机制:当元素数量 > 容量 * 负载因子(默认 0.75) 时扩容为 2 倍。
示例:HashSet 使用
import java.util.*;

public class HashSetDemo {
    public static void main(String[] args) {
        // 创建 HashSet
        Set<String> set = new HashSet<>();

        // 添加元素(自动去重)
        set.add("Java");
        set.add("Python");
        set.add("Java"); // 重复,不会添加
        set.add(null);   // 允许一个 null

        System.out.println("集合大小: " + set.size()); // 3
        System.out.println("是否包含 Java: " + set.contains("Java")); // true

        // 遍历(顺序不确定)
        for (String lang : set) {
            System.out.println("编程语言: " + lang);
        }

        // 删除元素
        set.remove("Python");
        System.out.println("删除后: " + set);
    }
}

3.2 LinkedHashSet(基于 LinkedHashMap)

✅ 特点:
  • 底层结构:LinkedHashMap(哈希表 + 双向链表);
  • 有序:按插入顺序迭代;
  • 性能略低于 HashSet(因维护链表);
  • 其他特性同 HashSet。
示例:LinkedHashSet 使用
import java.util.*;

public class LinkedHashSetDemo {
    public static void main(String[] args) {
        Set<String> set = new LinkedHashSet<>();

        set.add("第三");
        set.add("第一");
        set.add("第二");
        set.add("第一"); // 重复,忽略

        // 按插入顺序输出
        System.out.println("LinkedHashSet 顺序: " + set); // [第三, 第一, 第二]
    }
}

3.3 TreeSet(基于红黑树)

✅ 特点:
  • 底层结构:红黑树(自平衡二叉搜索树);
  • 有序:按自然顺序或自定义比较器排序;
  • 查找/添加/删除:O(log n);
  • 不允许 null(除非自定义比较器处理);
  • 线程不安全。
📌 红黑树特性:
  • 每个节点是红色或黑色;
  • 根节点是黑色;
  • 红色节点的子节点必须是黑色;
  • 从任一节点到其每个叶子的所有路径包含相同数目的黑色节点;
  • 保证树高度为 O(log n),操作高效。
示例:TreeSet 使用
import java.util.*;

public class TreeSetDemo {
    public static void main(String[] args) {
        // 1. 自然排序(实现 Comparable)
        Set<Integer> numbers = new TreeSet<>();
        numbers.add(5);
        numbers.add(1);
        numbers.add(3);
        System.out.println("数字排序: " + numbers); // [1, 3, 5]

        // 2. 自定义排序(Comparator)
        Set<String> words = new TreeSet<>((s1, s2) -> s2.compareTo(s1)); // 逆序
        words.add("Apple");
        words.add("Banana");
        words.add("Cherry");
        System.out.println("字符串逆序: " + words); // [Cherry, Banana, Apple]

        // 3. 自定义对象排序
        Set<Student> students = new TreeSet<>((s1, s2) -> Integer.compare(s1.age, s2.age));
        students.add(new Student("张三", 20));
        students.add(new Student("李四", 18));
        students.add(new Student("王五", 22));
        System.out.println("学生按年龄排序: " + students);
    }

    // 辅助类
    static class Student {
        String name;
        int age;
        Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
        @Override
        public String toString() {
            return name + "(" + age + ")";
        }
    }
}

四、Map 接口及其实现

Map 存储键值对(Key-Value),键不可重复。

4.1 HashMap(基于哈希表)

✅ 特点:
  • 底层结构:同 HashSet(数组 + 链表/红黑树);
  • 无序;
  • 允许一个 null 键和多个 null 值;
  • 线程不安全。
📌 底层原理(JDK 8+):
  • 哈希函数:hash(key) = (key == null) ? 0 : h ^ (h >>> 16)(扰动函数,减少冲突);
  • 扩容:2 倍扩容,重新计算每个键的哈希桶位置;
  • 树化:链表长度 ≥ 8 且数组长度 ≥ 64 时转红黑树。
示例:HashMap 使用
import java.util.*;

public class HashMapDemo {
    public static void main(String[] args) {
        Map<String, Integer> scores = new HashMap<>();

        // 添加键值对
        scores.put("张三", 95);
        scores.put("李四", 88);
        scores.put("王五", 92);
        scores.put(null, 100); // 允许 null 键

        // 获取值
        System.out.println("张三的成绩: " + scores.get("张三")); // 95
        System.out.println("null 键的值: " + scores.get(null)); // 100

        // 遍历(推荐 entrySet)
        for (Map.Entry<String, Integer> entry : scores.entrySet()) {
            System.out.println(entry.getKey() + " -> " + entry.getValue());
        }

        // 检查键/值
        System.out.println("是否包含李四: " + scores.containsKey("李四")); // true
        System.out.println("是否包含成绩90: " + scores.containsValue(90)); // false
    }
}

4.2 LinkedHashMap(哈希表 + 双向链表)

✅ 特点:
  • 按插入顺序或访问顺序迭代;
  • 性能略低于 HashMap;
  • 常用于 LRU 缓存(通过 accessOrder=true)。
示例:LinkedHashMap 使用
import java.util.*;

public class LinkedHashMapDemo {
    public static void main(String[] args) {
        // 按插入顺序
        Map<String, String> map = new LinkedHashMap<>();
        map.put("1", "一");
        map.put("3", "三");
        map.put("2", "二");
        System.out.println("插入顺序: " + map); // {1=一, 3=三, 2=二}

        // 按访问顺序(LRU)
        Map<String, String> lruMap = new LinkedHashMap<>(16, 0.75f, true) {
            @Override
            protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
                return size() > 3; // 最多保留3个
            }
        };
        lruMap.put("A", "1");
        lruMap.put("B", "2");
        lruMap.put("C", "3");
        lruMap.get("A"); // 访问 A,将其移到末尾
        lruMap.put("D", "4"); // 触发移除最旧的 B
        System.out.println("LRU 顺序: " + lruMap); // {C=3, A=1, D=4}
    }
}

4.3 TreeMap(基于红黑树)

✅ 特点:
  • 按键的自然顺序或自定义比较器排序;
  • 不允许 null 键(除非自定义比较器);
  • 提供范围操作:subMap(), headMap(), tailMap()。
示例:TreeMap 使用
import java.util.*;

public class TreeMapDemo {
    public static void main(String[] args) {
        Map<Integer, String> map = new TreeMap<>();

        map.put(3, "三");
        map.put(1, "一");
        map.put(2, "二");

        System.out.println("按键排序: " + map); // {1=一, 2=二, 3=三}

        // 范围查询
        System.out.println("小于2的键值对: " + map.headMap(2)); // {1=一}
        System.out.println("大于等于2的键值对: " + map.tailMap(2)); // {2=二, 3=三}
    }
}

五、迭代器 Iterator

用于安全遍历集合,支持在遍历时删除元素(remove() 方法)。

示例:Iterator 使用
import java.util.*;

public class IteratorDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        // 获取迭代器
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String item = it.next();
            if ("B".equals(item)) {
                it.remove(); // 安全删除(避免 ConcurrentModificationException)
            }
        }
        System.out.println("删除 B 后: " + list); // [A, C]

        // 增强 for 循环本质是 Iterator
        for (String s : list) {
            System.out.println(s);
        }
    }
}

⚠️ 注意:遍历时直接调用集合的 remove() 会抛出 ConcurrentModificationException!


六、工具类 Collections

提供对集合的静态操作方法。

示例:Collections 常用方法
import java.util.*;

public class CollectionsDemo {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(3);
        list.add(1);
        list.add(2);

        // 排序
        Collections.sort(list);
        System.out.println("排序后: " + list); // [1, 2, 3]

        // 反转
        Collections.reverse(list);
        System.out.println("反转后: " + list); // [3, 2, 1]

        // 打乱顺序
        Collections.shuffle(list);
        System.out.println("打乱后: " + list);

        // 查找最大/最小值
        System.out.println("最大值: " + Collections.max(list)); // 3
        System.out.println("最小值: " + Collections.min(list)); // 1

        // 创建不可变集合(Java 9+ 推荐用 List.of())
        List<String> unmodifiable = Collections.unmodifiableList(Arrays.asList("A", "B"));
        // unmodifiable.add("C"); // ❌ 抛出 UnsupportedOperationException

        // 同步包装(线程安全,但性能低)
        List<Integer> syncList = Collections.synchronizedList(new ArrayList<>());
    }
}

七、总结:集合选型指南

需求推荐集合
有序、可重复、随机访问多ArrayList
频繁首尾增删LinkedList
去重、无序、高性能HashSet
去重、插入顺序LinkedHashSet
去重、排序TreeSet
键值对、无序、高性能HashMap
键值对、插入顺序LinkedHashMap
键值对、按键排序TreeMap

📌 核心原则:

  • 默认使用 ArrayList 和 HashMap;
  • 需要排序用 TreeSet/TreeMap;
  • 需要插入顺序用 LinkedHashSet/LinkedHashMap;
  • 避免在遍历时直接修改集合,使用 Iterator.remove()。

掌握集合框架的接口设计、实现原理与适用场景,是编写高效 Java 程序的关键能力。

【C++PTA】6-1 Point类的运算 (10 分) 定义Point类,有坐标x,y两个私有成员变量;对Point类重载“+”(相加)、“-”(相减)和“==”(相等)运算符,实现对坐标的改变,要求用友元函数和成员函数两种方法实现。对Point类重载<<运算符,以使得代码 Point p; cout<<p<<endl;可以输出该点对象的坐标。 函数接口定义: 实现Point类。 裁判测试程序样例: /* 请在这里填写答案 */ int main(int argc, char const *argv[]) { P 阅读详情

相关推荐

安装VMware,出现没有虚拟网络适配器的问题

安装VMware,出现没有虚拟网络适配器的问题

Young_Harry的博客 1万+

Java集合框架最全详解(超详细)保姆级

TreeSet集合存储自定义类型的对象时,必须指定排序规则,支持如下两种方式来指定比较规则。方式一让自定义的类实现Comparable接口,重写里面的compareTo方法来指定比较规则。方式二通过调用TreeSet集合有参数构造器,可以设置Comparator对象(比较器对象,用于指定比较规则)。

Aa2467022050的博客 6853

内网渗透—横向移动&IPC横移&Impacket套件&CS插件

以上便是IPC横移的知识。最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

2301_76227305的博客 1890

【Java入门】集合框架

集合:List、Set、Map

qq_53662373的博客 2460

【NAS系统】DSM7.2部署SVN服务

早期的群晖版本可以在套件中心找到SVN Server直接安装,然后配置仓库和用户。但‌2提到DSM7.0之后套件中心没有SVN了,得用Docker。

qq_38350004的博客 4847

鼎阳示波器SCPI指令与MD5算法解锁带宽升级实战

本文详细介绍了鼎阳示波器通过SCPI指令与MD5算法实现带宽升级的实战流程。从设备连接、信息获取到Python密钥生成脚本解析,逐步指导用户完成升级操作,并涵盖常见问题排查与功能选件激活指南,帮助用户充分释放设备潜能。

www00的博客 340

Java集合框架最全详解(看这篇就够了)

Java集合体系框架 Java集合类主要由两个根接口Collection和Map派生出来的。 Collection派生出了三个子接口: 1)List List代表了有序可重复集合,可直接根据元素的索引来访问 2)Set Set代表无序不可重复集合,只能根据元素本身来访问 3)Queue Queue是队列集合 Map接口派生: Map代表的是存储key-value对的集合,可根据元素的key来访问value。 因此Java集合大致也可分成List、Set、Que

m0_67322837的博客 6万+

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 208

一篇彻底搞懂Java中的集合框架!

所以当查询比较多,增删比较少时,就可以用ArrayList。(不是很占内存)当增删比较多,查询比较少的时候,就用LinkedList更合适。

2401_87705025的博客 2102

手把手教你从入门到精通C#串口通信

本文以我开发的串口助手SComTool为例,详细介绍《C#串口通信从入门到精通》专栏的目录内容,本专栏由一个高级工程师多年实战经验总结,绝对是c#串口通信的葵花宝典!带您从入门到精通C#串口通信!

qq_34059233的博客 3万+

【ComfyUI】SDXL + 单LoRA 房屋平面图渲染装修

本文介绍了一种基于ComfyUI的室内平面设计图自动生成效果图的工作流。该流程通过导入房屋平面图,结合SDXL室内设计模型与北欧风格LoRA模块,快速生成多房间效果展示。工作流包含图像输入、文本处理、模型加载和图像生成等环节,支持风格化渲染和细节补充,适用于建筑设计、家装展示、房地产营销等场景。核心采用SDXL通用室内设计模型和北欧极简LoRA,通过节点衔接实现自动化批量生成,能在短时间内将平面方案转化为逼真的三维效果图。该技术可提升设计呈现效率,辅助客户决策,并应用于教学研究领域。

Mr数据杨 3643

Java集合框架

数组的弊端。

weixin_65081564的博客 191

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.5 RTC设备编写与实现

4. Linux kernel RTC子系统goldfish_rtc driver分析。电脑,会需要时间,还比如 我们的手机、平板,都需要时间;驱动基本就是应用层需要什么数据你给什么数据就行,基本必须实现的就是。3.2 Linux kernel RTC 设备描述符讲解。中看到他的具体实现,也可以根据他的寄存器描述直接在。5. 将驱动添加进kernel和测试RTC驱动。系统来说,时间是一个非常重要的功能;之类的函数接口,接下来我们就开始讲解如何写。,所以我们直接移植设备树即可。,他的寄存器很简单,你可以从。

DSMGUOGUO的博客 568

Java,集合框架体系

(11)boolean retainAll(Collection coll):从当前集合中删除两个集合中不同的元素,使得当前集合仅保留与coll集合中的元素相同的元素,即当前集合中仅保留两个集合的交集,即this = this ∩ coll;即coll集合是否是当前集合的“子集”(2)addAll(Collection other):添加other集合中的所有元素对象到当前集合中,即this = this ∪ other。(12)Object[] toArray():返回包含当前集合中所有元素的数组。

ZXH7762082的博客 1246

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java基础系列文章-集合框架体系

坚持最初的梦想,年轻没有失败。

相信自己有能力,那么你就真的会有! 891

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java8新特性详解

本文是介绍Java8新特性与常用方法(此篇只做大体介绍了解,之后会把重要的部分写在新的博客中)说明:在工作中发现Java8新特性的写法无处不在,必须了解学会才能看懂前辈写的代码,本篇对Java8新特性做了全面的总结。

陈老老老板的博客 5万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java集合框架体系总结

Java集合框架核心摘要(149字) Java集合分为单列(Collection)和双列(Map)两大体系。单列集合包含: List:有序可重复,ArrayList(数组)随机访问快,LinkedList(链表)头尾操作快 Set:无序不重复,HashSet最快,LinkedHashSet保序,TreeSet自动排序 Queue:ArrayDeque替代Stack,PriorityQueue优先级队列 Map以键值对存储,HashMap最快,LinkedHashMap保序,TreeMap按键排序,Concu

程序吟游的博客 4650

【Java 8系列】Stream详解,看这一篇就够啦

热门系列: 【Java 8系列】Java开发者的判空利器 -- Optional 【Java 8系列】Lambda 表达式,一看就废 程序人生,精彩抢先看 1.前言 2.正文 3.总结 ...

Yangy的博客 5万+

JAVA8十大新特性详解

前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特性的文章, 例如Playing with Java 8 – Lambdas and Concurrency、Java 8 Date Time API Tutorial : LocalDateTime和Abstract C...

人生若只如初见的博客 2万+

Java 8系列之Stream的基本语法详解

概述继Java 8系列之Lambda表达式之后,我们来了解Stream。Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等。聚合操作为了学习聚合的使用,在这里,先定义一个数据类:public class Student { int no

行云间 7万+

Java8 详解

java 1.8是什么? Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。 java 1.8有什么新的特性? Lambda 表达式 : Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。 方法引用 : 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或

共勉 3382

java8-LocalDate详解

LocalDate 分类分工 java.time.LocalDate ->只对年月日做出处理 java.time.LocalTime ->只对时分秒纳秒做出处理 java.time.LocalDateTime ->同时可以处理年月日和时分秒 优点 除了使用起来更加简单和灵活,主要是传统的时期处理类Date、Calendar不是多线程安全的,而LocalDate 线程安全的,所以不...

菜不是原罪 3336

Java8 之 Optional 详解

关于使用Optional的误区有以下:1. 正确的使用创建方法,不确定是否为 null 时尽量选择 ofNullable 方法;2. 通过源代码会发现,它并没有实现 java.io.Serializable 接口,因此应避免在类属性中使用,防止意想不到的问题;3. 避免直接调用 Optional 对象的 get() 和 isPresent() 方法,尽量多使用 map()、filter()、orElse()等方法来发挥 Optional 的作用。

流华追梦的专栏 4889

Java集合框架体系

集合类的作用 集合类也叫做容器类,和数组一样,用于存储数据,但数组类型单一,并且长度固定,限制性很大,而集合类可以动态增长。集合存储的元素都是对象(引用类型),所以集合可以存储不同的数据类型,如果是有序集合,则需要元素类型一致。 集合类支持泛型,避免数据不一致和转换异常。不同的集合类对不同的数据结构进行了封装。所以要熟悉各个集合类的使用场景。 集合框架体系的组...

weixin_30767921的博客 146

【Java】从java8到java17各版本新特性详解

下面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线,可以看出,JDK 17的支持时间最长,可以延续到2029年9月。考虑到技术更新的速度,这次免费商用8年的时间可谓是经过精心考虑,旨在让用户放心地升级到JDK 17(不过JDK 8的支持时间更长,可以延续到2030年12月)。从JDK诞生到现在,仅有几个版本得到了长期支持,主要包括JDK 7、JDK 8、JDK 11以及即将发布的JDK 17,它将是继Java 8之后最重要的LTS版本,是Java社区八年努力的成果。

一个天蝎座的程序猿 5888

Java8 Stream详解

Java8中提供了Stream对集合操作作出了极大的简化,学习了Stream之后,我们以后不用使用for循环就能对集合作出很好的操作。 一、流的初始化与转换:   Java中的Stream的所有操作都是针对流的,所以,使用Stream必须要得到Stream对象:   1、初始化一个流:     Stream stream = Stream.of("a", "b", "c");

HappyHeng的博客 2万+
上一篇: 7、Java 核心 API 与常用类库详解
下一篇: 9、Java 泛型原理与使用详解
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值