JAVA2核心技术卷II -- 第2章. 集合

1. 集合接口和迭代器接口

    1.1 接口

        集合类基本接口: Collection,包括boolean add(E element);和Iterator<E> iterator();等方法

        迭代器接口: Iterator,包括next(); hasNext(); remove();等方法

        Collection<String> c = ...;

        Iterator<String> iter = c.iterator();

        while (iter.hasNext()) {

            String element = iter.next();

            do something with element

        }

    1.2 移除元素

        当Iterator进行remove操作时,一定要使用next()方法跳过该元素,然后才执行remove操作

        Iterator<String> it = c.iterator();

        it.next();    //跳过第一个元素

        it.remove();    //删除第一个元素

        同样,如果需要删除2个相邻元素,你需要这么使用

        it.next();

        it.remove();

        it.next();

        it.remove();

    1.3 java.util.Collection<E>方法

        Iterator<E> iterator(): 返回一个迭代器,用于访问集合中的各个元素

        int size(): 存放集合中元素数量

        boolean isEmpty(): 如果没有元素,返回true

        boolean contains(Object obj): 该集合中包含一个与obj相等的对象,返回true

        boolean containsAll(Collection<?> other): 该集合包含了other集合中所有元素,返回true

        boolean add(Object element): 添加一个元素

        boolean addAll(Collection<? extends E> other): 将other中所有元素添加到集合

        boolean remove(Object obj): 移除该集合中与obj相等的对象

        boolean removeAll(Collection<?> other): 移除other中所有元素

        void clear(): 移除该集合中所有元素

        boolean retainAll(Collection<?> other): 移除所有与other众元素不相等的所有元素 

        Object[] toArray(): 返回该集合数组

2. 集合概述

    List、Set、Queue实现了Collection接口,而Map接口则为另一种实现

    2.1 Collection - List

        ArrayList: 可以动态增长和减缩的索引序列

        LinkedList: 可以在任何位置进行高效插入和移除的有序序列

    2.2 Collection - Set

        HashSet: 没有重复元素的无序集合

        TreeSet: 有序集

        EnumSet: 包含枚举类型元素集

        LinkedHashSet: 可以记住元素被插入顺序的集合

    2.3 Collection - Queue

        PriorityQueue: 可以高效的移除最小元素的集合

    2.4 Map

        HashMap: 一种存储键/值关联的结构

        TreeMap: 键有序的map集合

        EnumMap: 键属于枚举类型的map集合

        LinkedHashMap: 可以记住键/值被添加顺序的map集合

        WeakHashMap: 该map集合中的值如果没有在其他地方使用,则被垃圾回收器回收

        IdentityHashMap: 该map集合中的键使用==,而不是用equals来进行比较

3. LinkedList(链表)

    链表可以在队列前、中间、后方便的插入元素

    3.1 和Iterator同时使用

        List<String> staff = new LinkedList<String>();

        staff.add("Amy");

        staff.add("Bob");

        staff.add("Carl");

        Iterator iter = staff.iterator();

        String first = iter.next();

        String second = iter.next();

        iter.remove();    //删除第二个元素Bob

    3.2 在任意位置插入元素

        List<String> staff = new LinkedList<String>();

        staff.add("Amy");

        staff.add("Bob");

        staff.add("Carl");

        ListIterator iter = staff.listIterator();    //listIterator有add方法,可以方便的在链表中添加元素

        iter.next();

        iter.add("Juliet");    //添加元素Juliet在Bob前

        而ListIterator还存在previous()和hasPrevious()方法,和next()与hasNext()相对应

        不同在同一行中调用两次remove方法,必须有next()或者previous()

    3.3 使用set方法用新值取代原来的值

        String oldValue = iter.next();    //返回第一个元素

        iter.set(newValue);    //设置第一个元素到新的值

    3.4 如果多个迭代器对同一链表操作

        如果该集合的元素被一个迭代器删除,而另外一个迭代器需要访问,那么将有ConcurrentModifiactionException异常

4. ArrayList(数组列表)

    两种方式来访问元素,一种迭代器,一种get和set方法来访问,后一种对ArrayList适用。Vector是同步的,ArrayList是异步,所以访问ArrayList的速度比Vector快。

5. HashSet(散列集)

    散列集没有顺序,它是通过HashCode来查找该元素的位置,使用add方法添加元素到散列表中,使用contains查看是否包含某个对象。

6. TreeSet(树集)

    6.1 树集合散列集相似,但是树集是一个有序集合,可以按照任何顺序插入元素,但是进行迭代时,各个值会自动排序

        SortedSet<String> sorter = new TreeSet<String>();

        sorter.add("Bob");

        sorter.add("Amy");

        sorter.add("Carl");

        for (String s : sorter) System.println(s);

        打印顺序为 Amy Bob Carl

        树集添加元素的速度小于散列集 ,但还是大于数组和链表

    6.2 TreeSet是实现了Comparable接口,然后进行排序的,如果需要实现自己的排序方式,那么需要重新实现Comparable接口,然后再构造器中提供Comparator对象

7. PriorityQueue(优先级队列)

    能够以任意顺序插入元素,再按照顺序读取元素,当调用remove方法,返回当前优先级队列中最小元素。一般用来对优先级队列进行任务调度,每次找出最高优先级的任务。

8. Map(映射表)

    分为HashMap和TreeMap,HashMap对键进行散列,不需要排序;TreeMap对键的全局顺序进行排序。HashMap的速度较快,一般用HashMap进行操作

    8.1 put和get操作

        Map<String, Employee> staff = new HashMap<String, Employee>(); 

        Employee harry = new Employee("Harry Hacker");

        staff.put("987-01-889", harry);    //加入员工编号和姓名

        e = staff.get("987-01-889");    //根据Key得到Value信息

    8.2 得到所有键的集合

        Set<String> keys = staff.keySet();

        for (String key : keys) {}  

    8.3 值得集合 Collection<k> values()

    8.4 键/值集合

        for (Map.entry<String, Employee> entry : staff.entrySet()) {

            String key = entry.getKey();

            Employee value = entry.getValue();

        }

        另一种方法,使用Iterator来遍历

        Iterator<Map.Entry<String, Employee>> it = staff.entrySet().iterator();

        while(it.hasNext()) {

            Map.Entry entry = it.next();

            String key = entry.getKey();

            Employee value = entry.getValue();

        }

    8.5 其他的一些方法

        void put(Map<key,value> entries)    //把Map中所有项放入到Map中

        boolean containsKey(Object key)    //该Map中已经存在键,返回true

        boolean containsValue(Object value)    //该Map中已经存在值,返回true

9. WeakHashMap(弱散列映射表)

    当键不再使用,需要回收,那么就需要WeakHashMap,它用WeakReference来持有键,当弱引用加入队列,则表示该对象不再将使用

10. LinkedHashSet和LinkedHashMap

    能够记录插入顺序,在存取时,能够按顺序排序

    Map staff = new LinkedHashMap();

    staff.put("144", new Employee("Amy"));

    staff.put("255", new Employee("Bob"));

    之后staff.keySet().iterator()枚举键

    144    255

    使用staff.values().iterator()枚举值

    Amy    Bob

11. EnumSet

    enum Weekday {MONDY, TUESDAY, WEDNESDAY...};

    EnumSet always = EnumSet.allOf(Weekday.class);    //返回所有枚举值

12. IdentityHashMap(标识散列映射表)

    键的散列码不是由hashCode,而是由System.IdentityHashCode计算来的,同时使用==,而不是equals来比较相等。

13. 集合框架

    13.1 轻量级包装器

        List<Card> cardList = Arrays.asList(cardDeck);    //Arrays返回包装了一个普通Java数组的List包装器,可以使用get和set方法来操作数据

    13.2 子范围

        List a = staff.subList(10,20);    //取出staff中10到19的元素

    13.3 同步视图

        HashMap<String, Employee> staff = new HashMap<String, Employee>();

        Map<String, Employee> map = Collections.synchronizedMap(staff);

    13.4 集合与数组的转化

        数组转集合

        String[] values = ...;

        HashSet<String> staff = new HashSet<String>(Arrays.asList(values));

        集合转数组

        String[] values = staff.toArray(new String[0]);    //因为集合可能是特定类型,比如String,那么就需要准确转换类型

        

java核心技术卷2 对java基础技术的较为全面的讲解。。。。。。。。。。 立即下载

相关推荐

JAVA.2核心技术.卷II:高级特性(原书第7版).part2.rar

本书是Java技术权威指南,全面覆盖Java技术的高级主题,包括流与文件、XML、网络、数据库编程、高级Swing、高级 AWT、JavaBean构件、安全、分布式对象、脚本、编译与注解处理等,同时涉及本地化、国际化以及Java SE 6的内容。本书对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。   本书适合软件开发人员、高等院校教师和学生参考。 本资源共分5部分,分别为: JAVA.2核心技术.卷II:高级特性(原书第7版).part1.rar JAVA.2核心技术.卷II:高级特性(原书第7版).part2.rar JAVA.2核心技术.卷II:高级特性(原书第7版).part3.rar JAVA.2核心技术.卷II:高级特性(原书第7版).part4.rar JAVA.2核心技术.卷II:高级特性(原书第7版).part5.rar

Java核心技术卷I -- 第13章 集合

1. 集合接口和迭代器接口 1.1 接口 集合类基本接口: Collection,包括boolean add(E element);和Iterator&lt;E&gt; iterator();等方法 迭代器接口: Iterator,包括next(); hasNext(); remove();等方法 Collection&lt;String&gt; c = ...; Iterator&l...

overkill 203

SwarmClaw:自托管多智能体AI运行时部署与实战指南

多智能体系统是人工智能领域的重要发展方向,它通过多个具备自主决策和协作能力的智能体共同完成任务,其核心原理在于分布式问题求解与协同规划。这种架构在提升任务处理效率、复杂问题分解和鲁棒性方面具有显著技术价值,广泛应用于自动化工作流、虚拟团队协作、智能客服和个性化助手等场景。本文聚焦于SwarmClaw这一自托管的多智能体AI运行时,它原生支持Model Context Protocol,并内置了超过23种AI提供商,为开发者提供了一个开箱即用且高度可定制的控制平面,便于构建和管理复杂的多智能体协作网络。

weixin_27207591的博客 401

[翻译]Java 核心技术(第7版)(2)

Chapter 7. 图形编程至此,你还只了解到如何编写从键盘接受输入,进行处理并在控制台显示结果。这并不是现在大多数用户想要的。现代的程序和网页并不是这样运行的。本章将开始介绍编写使用图形用户接口(GUI)的java程序。尤其值得一提的是,你将学会如何编写在屏幕上改变窗体大小和定位窗体,在一个窗体上用各种字体来显示文本,显示图象等等。这将为你后续章节编写有趣的程序提供一些有用的技术。

796

从示波器波形看懂死区:手把手教你调ST MCU的PWM,避免三相桥直通炸管

本文详细解析了如何通过示波器波形判断PWM死区时间,并手把手教你调整STM32高级定时器寄存器,避免三相逆变桥直通炸管。文章涵盖死区时间的本质与风险、STM32配置详解、示波器调试技巧及FOC系统中的特殊考量,帮助工程师优化电机驱动性能与安全性。

weixin_30315723的博客 733

YOLO十年演进:从CNN到Transformer再到MoE,我看懂了2026年目标检测的落地风向标

技术永远是为业务服务的,能解决真实问题的技术,才是有价值的。YOLO的十年演进,从CNN到Transformer再到MoE,从来都不是学术上的炫技,而是一步一步解决工业落地的痛点:从让实时检测成为可能,到解决复杂场景的漏检误检,再到打破精度和算力的死局,每一步都踩在了工业落地的真实需求上。很多新入行的朋友,总喜欢追新,今天换Transformer,明天堆MoE,觉得模型越新、参数越大,就越厉害。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 748

ConcurrentModificationException异常原因和解决方法

首先看一下一个例子举出 ConcurrentModificationException 的出现场景: public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(){ { add(1); add(2); add(3); } }; Iterator&

qq_44613591的博客 9万+

Flutter应用安卓逆向之hook分析研究---附dart版本对照表(必看篇)

搜索md5、rsa、aes等关键字分析要破解的加密算法,使用frida进行hook可疑函数的偏移地址。,双击进去找到ssl_crypto_x509_session_verify_cert_chain函数的偏移地址进行hook掉;Flutter应用是内置进行ssl证书校验的,无法通过常规方法抓到包,需要通过frida把它内置的ssl校验hook掉。重构完成后会生成新的apk,把它安装到模拟器或者真机中并打开运行,此时系统会在。关键字的函数进行hook(因为其返回的是字符串类型)中,拖进ide搜索字符串。

云霄IT的博客 8441

Java Srting中的集合类Collection(四)——删除集合元素

package day04; import java.util.ArrayList; import java.util.Collection; import day02.Point; /** * 删除集合元素 * @author kaixu * */ public class CollectionDemo1 { public static void main(String[] a...

我以我心Coding You 909

《测绘综合能力》——大地测量

《测绘综合能力》大地测量 部分重要(常考)知识点(精简版)。

C_xxy's blog 803

在 SAP S/4HANA 本地部署和私有云里预览 RAP Travel App:为什么 ADT 发不出去,以及如何用 /IWFND/V4_ADMIN 正确发布 OData V4 Service

在SAP S/4HANA On-Premise/Private Cloud环境中,通过ADT直接发布RAP服务的本地端点常会失效。这是因为系统治理策略要求必须通过SAP Gateway Foundation(事务码/IWFND/V4_ADMIN)发布Service Group,而非开发者本机测试模式。本文详解了该流程的必要性:Service Group是OData V4服务的发布单元,涉及后端登记(/IWBEP/V4_ADMIN)和前端发布(/IWFND/V4_ADMIN)两个环节。提供了从ADT跳转SAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 269

如果当时这15道题能答好,现在应该已经被录取了(记一次面试的亲身经历 2020-7-23)

一、前情提要 今天请假面试,上午两家,下午三家(暂定两点钟A、三点半B、四点C),全军出击的赶脚,有一家公司感觉还可以,来这家面试还真是一波三折: ① 一个不认识的猎头推荐的C(今天上午11点给我打的电话),我还觉得挺靠谱的; ② 本来约的是下午四点,结果因为下午两点的面试A结束的比较早,离这家公司还比较近,我就贱呲呲的两点半就到了楼下; ③ 到楼下了,这个不靠谱的猎头连公司具体的楼层房间号都没给我发,只给了我一个电话(电话打了两遍还打不通,因为人家在开会); ④ 我都已经走了,因为找不到公司具体

学Java,找哪吒 1万+

yocto系列讲解[实战篇]54 - 添加Qt5和生成带Qt5的SDK

为了满足读者盆友想看yocto如何添加qt5的需求,今天就开始尝试添加meta-qt5

fulinux的博客 3871

JAVA2核心技术卷II:高级特性(原书第7版) -- 第2章. 集合

1. 集合接口和迭代器接口    1.1 接口        集合类基本接口: Collection,包括boolean add(E element);和Iterator iterator();等方法        迭代器接口: Iterator,包括next(); hasNext(); remove();等方法        Collection c = ...;      

overkill的专栏 687

相位偏折PMD全栈技术拆解 | 四步相移解算+梯度积分形貌重建,助力镜面工件微米级缺陷高精度稳定检测

工业精密检测领域中,高反光镜面类工件长期存在检测瓶颈,涵盖汽车高亮车漆、半导体抛光晶圆、光学透镜、精密抛光模具、玻璃盖板等主流产品。传统2D机器视觉仅能识别表面明显污渍、大尺寸破损,完全无法捕捉微米级划痕、凹坑、橘皮、曲面微形变等微观缺陷;常规线激光3D、普通结构光3D检测设备,面对镜面材质会产生严重镜面反射杂光,激光条纹、结构光图案完全失真,必须喷涂显影粉辅助检测,不仅破坏工件表面完整性,还无法适配自动化量产产线,检测效率与良率极低。

getusushu的博客 543

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

从《Java核心技术》纵览Java全貌

目录一、Java核心技术二、全面清晰三、深入透彻四、轻松上手五、全书共12章第1章概述Java语言的特色功能第2章详细论述如何下载和安装JDK以及本书的程序示例第3章开始讨论Java 语言,包括变量、循环和简单的函数第4章介绍面向对象两大基石中极要的一个概念——封装,以及Java语言实现封装的机制,即类与方法第5章介绍面向对象的另一个重要概念——继承,继承使程序员可以使用现有的类,并根据需要进行修改第6章展示如何使用Java的接口(可帮助你充分获得Java的完全面向对象程序设计能力)、lambda表达式(用

学Java,找哪吒 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

2025/03/23 ​《Java核心技术·卷I(原书第11版)》Java核心技术·卷II(原书第11版):高级特性》凯·S.霍斯特曼(Cay S. Horstmann)书籍阅读

2025/03/23 ​《Java核心技术·卷I(原书第11版)》Java核心技术·卷II(原书第11版):高级特性》凯·S.霍斯特曼(Cay S. Horstmann)书籍阅读

weixin_45428910的博客 1549

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【社区图书馆】读《Java核心技术 卷I》有感

近期二刷了《Java核心技术 卷I》,于是写个二刷读后感分享给入门Java的小伙伴,辅助学习。

**My Coding Family** 1056

Java编程的终极导航:《Java核心技术》系列全面解读

在编程世界中,Java的位置无可替代,无论是企业级应用、移动应用开发,还是大数据处理,Java都扮演着重要的角色。对于刚刚踏入这个领域的新手来说,有一条清晰的路线图是非常必要的;而对于经验丰富的开发者而言,及时更新知识库、了解新技术同样重要。这时,`《Java核心技术 卷I:开发基础(原书第12版)》`与`《Java核心技术 卷II:高级特性(原书第12版)》`便是你的灯塔,为你的Java学习之旅指引方向

hacker707的博客 2万+

赠送大家最喜欢的Java书籍,《Java核心技术.卷I 和 卷II》

文末送书福利,记得看完~导读:学习Java的经典名著非常多,这本书是你一定不能错过的:由凯.霍斯特曼写的《Core Java》,中文版名为《Java核心技术》。这本书几乎出现在每个“学Ja...

程序IT圈 1779

『赠书活动 | 第十五期』《Java核心技术·卷II》

『赠书活动 | 第十五期』《Java核心技术·卷II》

wei_shuo的博客 1万+

【送书福利】盼了一年的Java核心技术卷Ⅱ ,终于出来了 !

Core Java基于Java 17全面升级Java诞生28年来,这本享誉全球的 Java 经典著作《Core Java》一路伴随着 Java 的成长,得到了百万 Java 开发者的青睐,成为一本畅销不衰的Java经典图书,影响了几代技术人。最新版中文版《Java核心技术(原书第12版)经全面修订,以涵盖Java 17的新特性。新版延续之前版本的优良传统,用数百个实际的工程案例,全面系统地讲解了J...

程序IT圈 174

盼了一年的《Java核心技术》卷Ⅱ,终于上市了!​

Core Java基于Java 17全面升级Java诞生28年来,这本享誉全球的 Java 经典著作《Core Java》一路伴随着 Java 的成长,得到了百万 Java 开发者的青睐,成为一本畅销不衰的Java经典图书,影响了几代技术人。最新版中文版《Java核心技术(原书第12版)经全面修订,以涵盖Java 17的新特性。新版延续之前版本的优良传统,用数百个实际的工程案例,全面系统地讲解了J...

公众号-老炮说Java 382

盼了一年的Core Java最新版卷Ⅱ,终于上市了(文末送书)

新版延续之前版本的优良传统,用数百个实际的工程案例,全面系统地讲解了Java语言的核心概念、语法、 重要特性、 开发方法。Java诞生28年来,这本享誉全球的 Java 经典著作《Core Java》一路伴随着 Java 的成长,得到了百万 Java 开发者的青睐,成为一本畅销不衰的Java经典图书,影响了几代技术人。目前已经700+订阅,优快云最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

学Java,找哪吒 5010

java核心技术卷 II 流-笔记

例如,假设我们想要计算某个属性的平均值,那么我们就可以指定数据源和该属性,然后,流库就可以对计算进行优化,例如,使用多线程来计算总和与个数,并将结果合并。相比之下,本节开头处的循环要确切地指定计算应该如何工作,因此也就丧失了进行优化的机会流表面上看起来和集合很类似,都可以让我们转换和获取数据。peek() 是一个中间操作,它允许我们在流的每个元素上执行一个操作,但并不会改变流中的元素或中断流的处理。例如,filter方法不会从流中移除元素,而是会生成一个新的流,其中不包含被过滤掉的元素。

牛雪的小商店 1213

Core Java最新版 卷Ⅱ 上市!快来看看有哪些重要更新!

Core Java最新版 卷Ⅱ 上市!快来看看有哪些重要更新!

小虚竹的专栏 1万+
上一篇: Java核心技术卷I -- 第14章 多线程
下一篇: JAVA2核心技术卷II -- 第3章. 网络
book_overkill
博客等级 码龄20年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值