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万+

一次渗透测试引发的Json格式下CSRF攻击的探索

一次渗透测试引发的Json格式下CSRF攻击的探索

weixin_52501704的博客 1050

CXL协议-第三章 CXL事务层

CXL.io为I/O设备提供了一个非一致的负载/存储接口。图3-1显示了Flex总线分层层次结构中的位置。事务类型、事务分组格式、基于信用的流量控制、虚拟通道管理和事务排序规则遵循PCIe*定义,详情请参考PCIe基础规范的“事务层规范”章节。本章重点介绍了用于CXL.io的著名的PCIe操作模式或特性。

qq_41305217的博客 2769

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

STM32硬件SPI驱动ADS1220实战:从零搭建高精度数据采集系统(附避坑指南)

本文详细介绍了使用STM32硬件SPI驱动24位高精度ADC芯片ADS1220的完整实战方案。内容涵盖从硬件设计、CubeMX工程配置、SPI通信底层实现到数据读取策略与性能优化的全流程,并重点分享了多通道切换、噪声抑制等关键避坑指南,帮助开发者构建稳定可靠的高精度数据采集系统。

o4p5q6r7s的博客 450

最长连续回文串(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

APB Timer验证环境搭建——学习笔记(1)

以下为个人学习笔记,如有疏漏,请大家指正补充~~APB Timer是一个简单的下行计数器,包括一个32位计数器和一组比较器,可以实现多种计时功能。包括生成一次性中断或者定时中断。

qq_41651535的博客 1578

Win10 + Linux 双系统删除(Linux)

删除Linux所使用的磁盘分区 进入此电脑->计算机->管理->磁盘管理

weixin_52247624的博客 944

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

Echarts - 去掉图表上的横线和竖线

效果图 默认效果: 变为如下图所示效果: 实现方法 官方配置文档:https://echarts.apache.org/zh/option.html#radar.splitLine 在 xAxis yAxis 配置中分别加入以下代码: splitLine: { show:false }

🏆 前端领域优质创作者 1万+

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

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

weixin_30932215的博客 304

Unreal5从入门到精通 专栏目录

欢迎来到“UE5从入门到精通”专栏!在这里,我们将带您踏上一段精彩的旅程,深入探索虚幻引擎5(Unreal Engine 5)的无限可能。不论您是游戏开发的新手,还是希望提升技能的开发者,这里都有适合您的内容。基础知识:了解虚幻引擎5的界面、功能和基本操作,为您的学习打下坚实的基础。项目实战:通过实际项目案例,帮助您从理论走向实践,真实体验游戏开发的每个环节。高级技巧:分享各种高级功能和技巧,包括蓝图、C++编程、材质编辑、光照和渲染等,让您能够创作出更具专业水准的作品。

TxNet 2988

智护健康:基于 ESP32 的可穿戴式心率血氧远程监测手环设计与实现

随着健康管理理念的普及,可穿戴式健康监测设备成为刚需。本文设计了一款基于 ESP32 芯片的可穿戴式心率与血氧远程监测手环,通过集成专业生物传感器采集生理数据,借助 ESP32 的无线通信能力实现数据远程传输,搭配手机 APP 与云平台完成数据存储、分析与预警。文中详细阐述了硬件选型、模块接线、软件设计流程及核心代码实现,该手环具备低功耗、高精度、实时性强等特点,可满足日常健康监测与远程照护需求。

weixin_42300449的博客 1199

《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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

用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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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、付费专栏及课程。

余额充值