java编程思想读书笔记--使用C o l l e c t i o n s

I/O多路复用与异步I/O原理深度解析:从BIO到epoll再到AIO I/O模型是高并发系统性能的底层基石,其本质是解决CPU与慢速设备(如网络、磁盘)之间的效率失配问题。阻塞I/O(BIO)依赖线程独占等待,导致资源爆炸;I/O多路复用(如epoll)通过内核事件通知机制,实现单线程高效管理海量连接,显著降低上下文切换与内存开销;异步I/O(AIO)则进一步将数据搬运全程委托内核,以回调驱动实现真正无阻塞。这些技术共同支撑了Redis、Netty、Kafka等高性能中间件的低延迟与高吞吐能力。本文结合Linux内核源码、JVM NIO实现及可验证Demo,深入剖析selec 阅读详情
使用C o l l e c t i o n s
下面这张表格总结了用一个集合能做的所有事情(亦可对Set 和List 做同样的事情,尽管List 还提供了一
些额外的功能)。Map 不是从Collection 继承的,所以要单独对待。
B o o l e a n a d d ( O b j e c t ) *Ensures that the Collection contains the argument. Returns false if
it doesn ’t add th e argument.
B o o l e a n
a d d A l l ( C o l l e c t i o n )
*Adds all the elements in the argument. Returns true if any elements
were added.
v o i d c l e a r ( ) *Removes all the elements in the Collection.
Boolean contains(Object) True if the Collection contains the argument.
B o o l e a n True if the Collection contains all the elements in the argument.
236
containsAll(Collection)
B o o l e a n i s E m p t y ( ) True if the Collection has no elements.
I t e r a t o r i t e r a t o r ( ) Returns an Iterator that you can use to move through the elements in
the Collection.
Boolean remove(Object) *If the argument is in the Collection, one instance of that element
is removed. Returns true if a removal occurred.
B o o l e a n
r e m o v e A l l ( C o l l e c t i o n )
*Removes all the elements that are contained in the argument.
Returns true if any removals occurred.
B o o l e a n
r e t a i n A l l ( C o l l e c t i o n )
*Retains only elements that are contained in the argument (an
“intersection” from set theory). Returns true if any changes
occurred.
i n t s i z e ( ) Returns the number of elements in the Collection.
O b j e c t [ ] t o A r r a y ( ) Returns an array containing all the elements in the Collection.
O b j e c t [ ]
t o A r r a y ( O b j e c t [ ] a )
Returns an array containing all the elements in the Collection,
whose type is that of the array a rather than plain O b j e c t (you must
cast the array to the right type).
*This is an “optional ” method, which means it might not be
implemented by a particular Collection. If not, that method throws
an U n s u p p o r t e d O p e r a t i o n E x c e p t i o n . Exceptions will be covered in
Chapter 9.
boolean add(Object) *保证集合内包含了自变量。如果它没有添加自变量,就返回false(假)
boolean addAll(Collection) *添加自变量内的所有元素。如果没有添加元素,则返回true(真)
void clear() *删除集合内的所有元素
boolean contains(Object) 若集合包含自变量,就返回“真”
boolean containsAll(Collection) 若集合包含了自变量内的所有元素,就返回“真”
boolean isEmpty() 若集合内没有元素,就返回“真”
Iterator iterator() 返回一个反复器,以用它遍历集合的各元素
boolean remove(Object) *如自变量在集合里,就删除那个元素的一个实例。如果已进行了删除,就返回
“真”
boolean removeAll(Collection) *删除自变量里的所有元素。如果已进行了任何删除,就返回“真”
boolean retainAll(Collection) *只保留包含在一个自变量里的元素(一个理论的“交集”)。如果已进
行了任何改变,就返回“真”
int size() 返回集合内的元素数量
Object[] toArray() 返回包含了集合内所有元素的一个数组
*这是一个“可选的”方法,有的集合可能并未实现它。若确实如此,该方法就会遇到一个
UnsupportedOperatiionException,即一个“操作不支持”违例,详见第9 章。
下面这个例子向大家演示了所有方法。同样地,它们只对从集合继承的东西有效,一个ArrayList 作为一种
“不常用的分母”使用:
//: Collection1.java
// Things you can do with all Collections
package c08.newcollections;
import java.util.*;
public class Collection1 {
// Fill with 'size' elements, start
237
// counting at 'start':
public static Collection
fill(Collection c, int start, int size) {
for(int i = start; i < start + size; i++)
c.add(Integer.toString(i));
return c;
}
// Default to a "start" of 0:
public static Collection
fill(Collection c, int size) {
return fill(c, 0, size);
}
// Default to 10 elements:
public static Collection fill(Collection c) {
return fill(c, 0, 10);
}
// Create & upcast to Collection:
public static Collection newCollection() {
return fill(new ArrayList());
// ArrayList is used for simplicity, but it's
// only seen as a generic Collection
// everywhere else in the program.
}
// Fill a Collection with a range of values:
public static Collection
newCollection(int start, int size) {
return fill(new ArrayList(), start, size);
}
// Moving through a List with an iterator:
public static void print(Collection c) {
for(Iterator x = c.iterator(); x.hasNext();)
System.out.print(x.next() + " ");
System.out.println();
}
public static void main(String[] args) {
Collection c = newCollection();
c.add("ten");
c.add("eleven");
print(c);
// Make an array from the List:
Object[] array = c.toArray();
// Make a String array from the List:
String[] str =
(String[])c.toArray(new String[1]);
// Find max and min elements; this means
// different things depending on the way
// the Comparable interface is implemented:
System.out.println("Collections.max(c) = " +
Collections.max(c));
System.out.println("Collections.min(c) = " +
Collections.min(c));
// Add a Collection to another Collection
238
c.addAll(newCollection());
print(c);
c.remove("3"); // Removes the first one
print(c);
c.remove("3"); // Removes the second one
print(c);
// Remove all components that are in the
// argument collection:
c.removeAll(newCollection());
print(c);
c.addAll(newCollection());
print(c);
// Is an element in this Collection?
System.out.println(
"c.contains(\"4\") = " + c.contains("4"));
// Is a Collection in this Collection?
System.out.println(
"c.containsAll(newCollection()) = " +
c.containsAll(newCollection()));
Collection c2 = newCollection(5, 3);
// Keep all the elements that are in both
// c and c2 (an intersection of sets):
c.retainAll(c2);
print(c);
// Throw away all the elements in c that
// also appear in c2:
c.removeAll(c2);
System.out.println("c.isEmpty() = " +
c.isEmpty());
c = newCollection();
print(c);
c.clear(); // Remove all elements
System.out.println("after c.clear():");
print(c);
}
} ///:~
通过第一个方法,我们可用测试数据填充任何集合。在当前这种情况下,只是将int 转换成String。第二个
方法将在本章其余的部分经常采用。
newCollection()的两个版本都创建了ArrayList,用于包含不同的数据集,并将它们作为集合对象返回。所
以很明显,除了Collection 接口之外,不会再用到其他什么。
print()方法也会在本节经常用到。由于它用一个反复器(Iterator )在一个集合内遍历,而任何集合都可以
产生这样的一个反复器,所以它适用于List 和Set,也适用于由一个Map 生成的Collection。
main()用简单的手段显示出了集合内的所有方法。
在后续的小节里,我们将比较List ,Set 和Map 的不同实现方案,同时指出在各种情况下哪一种方案应成为
首选(带有星号的那个)。大家会发现这里并未包括一些传统的类,如Vector,Stack 以及Hashtable 等。
因为不管在什么情况下,新集合内都有自己首选的类。
epoll与io_uring深度对比:I/O多路复用与真正异步I/O的本质差异 I/O模型是操作系统与应用程序协同处理数据流动的基础机制。从阻塞I/O到非阻塞轮询,再到I/O多路复用(如epoll)和真正异步I/O(如io_uring),其演进核心在于‘等待成本’的转移路径:由线程挂起、忙等、事件驱动,最终走向内核全权接管与零拷贝完成。epoll通过红黑树+就绪链表实现高效事件通知,已成为高并发网络服务的事实标准;而io_uring依托共享内存环形缓冲区与内核专用线程,突破系统调用瓶颈,支撑存储与网络I/O的极致性能。二者并非替代关系,而是适配不同负载特征——epoll胜在确定性低延迟 阅读详情

相关推荐

Java I/O模型穿透指南:从Linux系统调用到WebFlux实战

I/O模型是后端性能的底层基石,其本质是操作系统对文件描述符的调度策略——阻塞/非阻塞由O_NONBLOCK标志控制,同步/异步反映API结果获取方式。理解epoll_wait、read系统调用与JVM线程状态(如WAITING/RUNNABLE)的映射关系,才能真正诊断高并发下的RT毛刺与线程堆积。NIO通过事件驱动提升连接复用率,而WebFlux依赖Reactive生态实现全链路非阻塞;但若混用JDBC等阻塞调用,将触发BlockingOperationError。本文结合strace、jstack、s

as2886089的博客 391

cc -c -o的使用

在一个文件夹下一共四个文件 function.h #ifndef __FUNCTION_H__ #define __FUNCTION_H__ void func(); #endif function.c #include #include "function.h" void func() {     printf("this is function

lppklm的专栏 8466

Cyclone IV E FPGA硬件设计与Quartus II约束实战指南

FPGA(现场可编程门阵列)作为可重构的半导体器件,其核心原理是通过硬件描述语言配置内部逻辑单元与互连资源,实现定制化数字电路。这一技术价值在于提供了硬件并行处理能力与设计灵活性,广泛应用于通信、工业控制和嵌入式系统等领域。在工程实践中,硬件设计与软件约束的协同至关重要,尤其是电源架构规划、高速差分I/O(如LVDS)的Bank特性配置,以及时序约束的精确设置。以Intel(原Altera)Cyclone IV E系列FPGA为例,深入解析其核心电压(VCCINT)与速度等级的关联、True LVDS与Em

weixin_30372371的博客 414

C++文件读写详解(ofstream,ifstream,fstream)

在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结: 这里主要是讨论fstream的内容: #include ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中 fstrea

晨雪无痕 93万+

从零构建基于ZYNQ与AD9361的SDR信号源:FPGA逻辑与射频前端的协同设计

本文详细介绍了从零开始构建基于ZYNQ与AD9361的SDR信号源的完整流程。通过解析FPGA逻辑与射频前端的协同设计,重点阐述了如何利用FPGA生成基带信号,并通过ARM处理器配置AD9361,最终实现一个可编程的2.4GHz载波信号发生器。内容涵盖硬件选型、Vivado环境搭建、AXI总线通信、LVDS接口设计及软件驱动开发,为SDR开发者提供了实用的实战指南。

weixin_29200485的博客 214

一文读懂GPU通信互联技术:GPUDirect、NVLink与RDMA

GPUDirect是NVIDIA开发的一项技术,旨在实现GPU与其他设备(如网络接口卡NIC和存储设备)之间的直接通信和数据传输,而无需CPU的参与。传统上,数据在GPU和另一个设备之间传输时,必须通过CPU,这导致潜在的性能瓶颈和延迟增加。GPUDirect技术则通过绕过CPU,直接访问和传输数据,显著提高系统性能。NVLink是NVIDIA开发的一种高速、高带宽的互连技术,用于连接多个GPU之间或GPU与其他设备(如CPU、内存等)之间的通信。

异构算力老群群(在读985计算机博士生)的技术博客 7774

N o v e m b e r 6 t h T u e s d a y

T h e r e   i s   a   j a v a   s o u r c e   a b o u t   e n c o d i n g   c h a r a c t e r s   s e t . i m p o r t   j a v a . i o . * ; p u b l i c   c l a s s   U C { p u b l i c   s t a t

Lu_ming的专栏 6046

YOLOv8缺陷检测可视化界面实战:PyQt5布局设计与代码实现

本文详细介绍了如何利用PyQt5为YOLOv8缺陷检测模型构建一个专业、易用的可视化界面。通过实战讲解PyQt5的布局管理器设计、信号槽机制与YOLOv8核心的集成,帮助开发者快速将AI模型部署为直观的桌面应用,提升工业质检等场景的落地效率。

redis7keeper的博客 758

最长连续回文串(Longest Palindromic Substring) 的 O(n)解法

这是Leetcode上的第5题,题目如下:Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.给定一个字符串,找到该字符串的最长连续回文子串。例如输入“babad”,输出结果为“bab”.Manacher’s Algorit

qq_36579479的博客 813

SAP UI5 本地开发工具 fiori-tools-proxy 中间件详解及使用场景

该中间件基于 http-proxy-middleware 库实现,分为 ui5 资源代理和 backend 代理两大模式,并可与 fiori run 或 ui5 serve 命令无缝集成,通过配置 ui5.path、ui5.url 以及 backend.path、backend.url 等参数,实现与目标系统的灵活对接和安全配置 (就后端系统代理而言,fiori-tools-proxy 内置 @sap-ux/backend-proxy-middleware,可将以指定前缀(如。

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

51单片机 驱动有源/无源蜂鸣器+Proteus仿真

51单片机 驱动有源/无源蜂鸣器+Proteus仿真 相关篇《51单片机 Proteus仿真有源蜂鸣器始终不响原因及解决方法》 电路搭建 采用NPN管驱动有源蜂鸣器电路 采用PNP管驱动有源蜂鸣器电路 采用PNP管驱动无源蜂鸣器 采用NPN管驱动无源蜂鸣器 Proteus元器件列表 实例代码 /************************************************************************************* * 实验现象:下载程序

perseverance51博客 2万+

To m c a t和I I S的配合

To m c a t和I I S的配合Wi n d o w s平台下最常用的We b服务器无疑是I I S(包括P W S),对于I I S,To m c a t也提供了配合工作的方法,使用这种方法,可以为本来不具有Java Servlet和J S P功能的I I S增加处理J S P和J a v aS e r v l e t的功能。为了使To m c a t和I I S一起工作,首先要得到i s

羔才生编程村 1454

MATLAB基础应用精讲-【深度强化学习】SAC(Soft Actor-Critic)算法(附MATLAB和python代码实现)

Actor 网络:用于选择动作。Critic 1 和 Critic 2 网络:用于估计 Q 值。Target Critic 1 和 Target Critic 2:与 Critic 网络架构相同,用于生成更稳定的目标 Q 值。,即在保证探索的情况下选择高价值动作。软更新目标 Q 网络参数,使得目标网络参数缓慢向当前网络靠近,避免振荡。

qq_36130719的博客 454

动态规划斜率优化:从暴力O(n²)到O(n)的几何降维打击

动态规划(DP)是解决最优化问题的核心算法范式,但其平方级时间复杂度常成为性能瓶颈。为了突破这一限制,算法优化领域发展出了多种技巧,其核心原理在于利用问题的特殊性质(如单调性、凸性)来避免无效的状态转移计算。斜率优化正是这类高级优化技术的典型代表,它将原本复杂的代数比较问题,转化为二维平面上的几何问题,通过维护点集的凸包并利用斜率进行快速决策筛选,从而将时间复杂度从O(n²)降至O(n)或O(n log n)。这项技术在处理具有特定形式的代价函数时极具价值,尤其适用于序列分割、任务调度等场景,例如经典的“任

weixin_30932215的博客 304

ardupilot 方向余弦矩阵/旋转矩阵的理解

本节主要记录自己对ardupilot中用到的方向余弦矩阵/旋转矩阵的理解,欢迎批评指正,有些资料参考网上写的比较好的资料,免得查找资料麻烦。旋转矩阵的坐标理解:表示从旋转矩阵的下标的坐标系的坐标变换到上标表示的坐标系坐标下。旋转矩阵的坐标系理解:表示从旋转矩阵的上标的坐标系变换到下标表示的坐标系下。从旋转矩阵的投影更好理解,比如下面旋转矩阵的第一行是左边坐标系的第一维分量在右边坐标系的投影。

陌城烟雨 612

Colmap论文——《Structure-from-Motion Revisited》论文阅读笔记

  最近又将Colmap论文翻出来仔细阅读总结了一下,于是顺便写个博客记录一下。Structure-from-Motion Revisited是当前SOTA的增量式SfM算法Colmap的论文,发表于2016年计算机视觉顶会CVPR。它是增量式SfM里程碑式的作品。 论文地址:https://openaccess.thecvf.com/content_cvpr_2016/papers/Schonberger_Structure-From-Motion_Revisited_CVPR_2016_paper.p

zeeq的博客 1万+

《Java I/O》Chapter2

chapter2 输出流 java.io.OutputStream类声明了三个基本方法将字节数据写入流中。它也包含了关闭和冲刷流的方法: public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException public void write(byte[] data, int offset, int length) throws IO

stepMore的博客 199

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

用java 输出文章_如何使用Java 输出,输出流读写数据

展开全部在“面向对象编程: J a v a c o l l e c t i o n 更有效管理 e l e m e n t s ”一文中,我们讨论了 J a v a 集合类架构中的类和功能并介62616964757a686964616fe78988e69d8331333332636334绍了它的排序功能。在本文中,我们将学习 J a v a 平台 提供的这些 I / O 类,接口和操作。让我们先从...

weixin_35756130的博客 147

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Sentinel-2数据预处理避坑指南:从L1C到可用TIFF,我踩过的那些雷

本文详细介绍了Sentinel-2数据从L1C到TIFF的完整预处理流程,包括数据获取、环境配置、Sen2Cor大气校正、GDAL转换等关键步骤的避坑指南。针对Java环境配置、GDAL版本冲突等常见问题提供实用解决方案,帮助用户高效处理Sentinel-2数据,提升遥感数据处理效率。

weixin_30407613的博客 432

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java 双向链表排序_数据结构与算法 java 双向链表 实现 caesar 凯撒 密码 26字母重排序...

package com.danny.demo.structuresAndAlgorithm;import com.danny.demo.structuresAndAlgorithm.DualLinkList.Node;import java.util.Random;/*** @description : 实现用户输入一个数使得26个字母的排列发生变化: 例如 输入7 :* 变成 [H, I, J,...

weixin_30925033的博客 125

算法题:(1) 有一个集合R = [a, b, c, d, e, f, g, h, i, j, k, l, m, n, ],....请写出求解这样的一个子集的通用算法。

问题:(1) 有一个集合R = [a, b, c, d, e, f, g, h, i, j, k, l, m, n, ], (2) 由一组R的真子集构成的集合Rn = [R1, R2, R3, R4, R5],其中 R1 = [ a, c, e, g, i, k, l, m] R2 = [ b, c, d, h, k] R3 = [ d, f, g, n] R4 = [ b, f, g, i, j...

MasterQKK 1053

保姆级教程:用SNAP处理哨兵2号L1C数据,5分钟搞定大气校正生成L2A

本文提供了一份详细的SNAP处理哨兵2号L1C数据的保姆级教程,帮助用户快速完成大气校正生成L2A数据。从环境准备、数据检查到实战操作和结果验证,涵盖了全流程的关键步骤和常见问题解决方案,特别适合遥感数据处理初学者和研究人员。

weixin_28745067的博客 235

AtCoder Regular Contest 065

C - 白昼夢 / Daydream Time Limit: 2 sec / Memory Limit: 256 MB Score :300300points Problem Statement You are given a stringSSconsisting of lowercase English letters. Another stringTTis initi...

pxlsdz的博客 423

java面试题

JavaOOP面试题 什么是B/S架构?什么是C/S架构? 1、B/S(Browser/Server):浏览器/服务器程序 2、C/S(Client/Server):客户端/服务端 Java开发平台 1、JAVA SE:主要用在客户端开发 2、JAVA EE:主要用在web应用程序开发 3、JAVA ME:主要用在嵌入式应用程序开发 JDK、JRE、JVM、JIT 1、JDK:java development kit:java开发工具包,是开发人员所需要安装的环境 2、JRE:java runti

m0_64892750的博客 545

c语言for循环自定义数据类型,GitHub - checkphone/C-like-Compiler: 类C语言编译器demo,支持基本数据类型、类型定义、I/O、if语句、while循环、for循...

C-like-Compiler类C语言编译器demo。定义的类C语言支持基本数据类型、类型定义、I/O、if语句、while循环、for循环、结构体、函数、注释等多种元素。编译器实现了词法分析器、递归下降法语法分析器、LL(1)语法分析器、语义分析等功能。输入输出输入文件:F:\mySource.bxc输出文件:F:\LineList.txt 和 F:\TokenList.txt编译器识别语言总述...

weixin_42315537的博客 251

IDEA ctrl+ alt+L或者S等快捷键无法使用时的解决方法和一些常用的快捷键

下载插件后有很多的快捷键,明明没有自定义快捷键,却无法使用 大概率会是热键的冲突 网易云的全局控制,QQ的全屏录制关掉就可以了 psvm+tab/main+tab :public static void main(String[] args) sout + tab:System.out.println() Carl+alt +T:格式化代码 (ps:格式化代码的风格可以到setting>Editor>codestyle>java中修改,修改风格可以到GitHub上下载xml格式

weixin_62179069的博客 3100
上一篇: 关于使用struts2跳转后css和js失效的解决方式
下一篇: Java中Collection和Collections的区别
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值