上一篇介绍List的时候说了List可以包含重复的数据,如果要保持数据不重复,那就要用到Set了。 注意:Set初始化的时候是用"{}"包含,List初始化是用"[]"包含。...可以用in判断一个元素是不是在集合里: image.png 返回“True”说明在集合里,返回“False”说明不在集合里。...还有一个快速创建集合的方法: image.png 用set()方法可以把一个字符串按字母拆分成一个集合。...还以可以进行集合之间的运算: image.png a - b 表示元素在a中,但是不在b中的集合 image.png a | b 表示元素在a中或者在b中的集合 image.png a & b 表示元素在...a中并且在b中的集合 image.png a ^ b 表示元素只在a中或者只在b中的集合 Set就先介绍到这里,总结一下,Set不能包含重复的元素,并且是无序的,还有可以对集合进行"-","|","&"
什么是不可重复读? 不可重复读(Non-repeatable Read)指的是在同一个事务中,多次读取同一数据集合时,由于其他并发事务的提交,后续读取的结果与前面的不一致。...为什么需要避免不可重复读? 避免不可重复读是为了保持事务的一致性视图。在商业逻辑中,经常需要对一组数据进行多次读取,并假设在事务期间数据是不变的。...不可重复读的实现原理? 不可重复读主要与数据库的隔离级别有关。在某些隔离级别(如可重复读或串行化)下,数据库使用锁或多版本并发控制(MVCC)机制来保证同一事务中的查询能够得到相同的数据结果。...不可重复读的优点 与脏读类似,不可重复读通常被视为负面现象,但在一些需要高并发的应用场景中,允许不可重复读可能会提升性能。 6....不可重复读的使用注意事项 隔离级别:应该选择适当的隔离级别(如可重复读或串行化)来防止不可重复读。 业务逻辑:业务逻辑应当设计成能够容忍或检测数据在事务中的变化。
不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。 为什么要用immutable对象?...所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis) 可以被使用为一个常量,并且期望在未来也是保持不变的 immutable对象可以很自然地用作常量,因为它们天生就是不可变的对于immutable...微软.NET团队已经正式发布了不可变集合,可以通过Nuget添加,包括了下面的不可变集合: System.Collections.Immutable.ImmutableArray System.Collections.Immutable.ImmutableArray...如果该实例已经是不可变的列表,它会简单地转换而不是创建一个新的集合。 • 该 WithLines() 方法遵循 我们的订单公约,如果新的列表和当前列表是相同的就可以避免创建一个新的实例。...这里有两个视频介绍可变性集合: Immutable Collections for .NET Inner workings of immutable collections 不可变集合的系列博客推荐
不可修改的集合 当我们想在Groovy中创建无法修改的集合时,我们可以使用asImmutable。 从Groovy 2.5.0开始,我们也可以在集合中使用asUnmodifiable方法。
微软基础类库(Base Class Library)团队已经完成了.NET不可变集合的正式版本,但不包括ImmutableArray。与其一起发布的还包括针对其它不可变对象类型的设计指南。...如果你需要在多个线程中安全地共享集合,并且允许每个线程在需要时对其内容进行改变。这种场景就是不可变集合所设计的初衷。...只读集合在使用时需要复制集合中的全部内容,而新的不可变集合可以以一种更高性能的方式从一个现有集合中进行创建。...使用不可变集合需要特别当心,因为你很容易错误地写成“list.Add(item)”,而正确的方法是“list = list.Add(item)”。...甚至编译器也可能产生类似的错误,这也是为什么不可变集合不支持构造函数的原因。
MySQL事务隔离级别: 在介绍脏读,不可重复读,幻读现象之前,我们先来了解MySQL的事务隔离级别,因为脏读,不可重复读,幻读等现象都是由数据库里的事务隔离级别来决定是否可能发生的。...由于第二个事务的修改,那么第一个事务读到的数据可能不一样,这样就发生了在一个事务内两次读到的数据是不一样的,因此称为不可重复读,即原始读取不可重复。...不可重复读现象主要是指,在一个事务结束前(执行commit或rollback前),进行两次或多次读取同一个数据会出现不同的结果,所以称为不可重复读,因为重复读取就会出现这种数据不一致的情况。...A在事务生命周期内多次查询数据时数据发生变化,才能算得上是不可重复读或幻读现象,如果用户A在一个事务结束后接着在另一个新的事务里查询后发现数据发生了变化,那么这就不算是不可重复读或者幻读。...不可重复读和幻读的区别: 不可重复读强调的是每次读取的是相同位置的数据,且该数据在另一个事务下被修改。注重的是修改。这个位置指的是哪一行、哪一个字段的数据。
2.1 何为脏读、不可重复读、幻读 脏读 所谓脏读是指一个事务中访问到了另外一个事务未提交的数据,如下图: ?...不可重复读 所谓不可重复读是指在一个事务内根据同一个条件对行记录进行多次查询,但是搜出来的结果却不一致。...发生不可重复读的原因是在多次搜索期间查询条件覆盖的数据被其他事务修改了,下面借助图表来解析下不可重复读。 ?...不可重复读的存在显得不是那么不可容忍,毕竟读取的是已经提交了的数据。 幻读 所谓幻读是指同一个事务内多次查询返回的结果集不一样(比如增加了或者减少了行记录)。...其实和不可重复读一样,发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据。
INSERT INTO heros_temp values(4, '吕布');小张还没有提交事务的时候,小李对数据表进行了访问,小张看到的结果如下图片小李读到了小张还没有提交的数据,我们称之为“脏读”不可重复读小张想查看...实际上小张遇到的情况我们称之为“不可重复读”,也就是同一条记录,两次读取的结果不同。...不可重复读:对某数据进行读取,发现两次读取的结果不同,也就是说没有读到相同的内容。这是因为有其他事务对这个数据同时进行了修改或删除。
Mysql RC/RR隔离原理和区别 不可重复读和可重复读 mysql四种隔离级别: 1.未提交读(READ UNCOMMITED)脏读 2.已提交读 (READ COMMITED)简称(RC) 不可重复读...3.可重复读(REPEATABLE READ)简称(RR) 4.可串行化(SERIALIZABLE) 这个不用验证了,所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰了,一般不用,性能特别低...但是,会出现脏读、不可重复读和幻读等问题。 READ COMMITTED:只允许事务读取已经提交的事务所做的修改。在同一个事务内,对同一行数据的查询可能返回不同的结果。...概念: 并发事务会出现更新丢失、脏读、不可重复读,幻读。 更新丢失:当两个或多个事务更新同一行记录,会产生更新丢失现象。...回滚覆盖,一个事务回滚操作,把其他事务已提交的数据给覆盖了;提交覆盖,一个事务提交操作,把其他事务已提交的数据给覆盖了 脏读:一个事务读取到了另一个事务修改但未提交的数据 不可重复读:一个事务读到了另一个事务已经提交的
不可重复读 一个事务读取同一条记录2次,得到的结果不一致: 由于在读取中间变更了数据,所以会话 1 事务查询期间的得到的结果就不一样了。...授权读取 也称为读提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。...可重复读取(Repeatable Read) 可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻读数据。这可以通过“共享读锁”和“排他写锁”实现。...尽管它会导致不可重复读、幻读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。...参考 数据库的脏读、幻读、不可重复读 脏读,不可重复读,幻读 何为脏读、不可重复读、幻读 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111668.html原文链接
具体来说,这就有可能产生脏读、不可重复读和幻读。事务是逻辑上的一组操作,要么全部执行,要么全部不执行脏读一个事务读取到了另一个未提交事务修改的数据。...不可重复读一个事务在执行过程中多次读取同一数据,但是每次读取的结果不一致。这是因为在这个事务执行期间,有其他事务修改了该数据并提交。...Read Uncommitted(读未提交):它是性能最好的,事务中的修改,即使没有提交,其他事务也可以看得到,会导致“脏读”、“幻读”和“不可重复读取”。...REPEATABLE READ(重复读):保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。Mysql的默认隔离级别,避免了“脏读取”和“不可重复读取”的情况,但不能避免“幻读”。...这样“脏读”、“不可重复读”、“幻读”都能避免了,但此隔离级别性能最低。
有时候希望从一个集合中随机取n个元素不重复 那么就取到这n个数字的索引 public static int[] GetRandomArray(int Number, int minNum, int maxNum...1; } } return b; } 注意重置随机数的种子 批量操作时候不会取到一样的 //提高随机数不重复概率的种子
/** * Guava的不可变集合用法 * * 创建对象的不可变集合是一种很好的防御性编程技巧; * Guava为所有JDK标准集合类型和Guava集合类型都提供了简单易用的不可变版本; *...* 1、不可变集合的优点: * (1)当对象被不可信的库调用时,不可变形式是安全的; * (2)不可变对象被多个线程调用时,不存在竞态条件问题; * (3)不可变集合不需要考虑变化,...因此可以节省时间和空间; * (4)不可变对象因为有固定变化,可以作为常量来安全使用; * 2、JDK提供的unmodifiableXXX方法笨重且累赘、不安全、低效; * 3、不可变集合的三种创建方法...arrayList = new ArrayList(); arrayList.add(1); arrayList.add(2); arrayList.add(3); //需要使用处理后的不可变集合...Collections.unmodifiableList(arrayList); test(arrayList); System.out.println(arrayList); //如果对不可变集合进行操作会报错
脏读、不可重复读、幻读 在现代关系型数据库中,事务机制是非常重要的,假如在多个事务并发操作数据库时,如果没有有效的机制进行避免就会导致出现脏读,不可重复读,幻读。...不可重复读 事务B读取了两次数据资源,在这两次读取的过程中事务A修改了数据,导致事务B在这两次读取出来的数据不一致。...这种在同一个事务中,前后两次读取的数据不一致的现象就是不可重复读(Nonrepeatable Read)。 ?...幻读和不可重复读有些类似,但是幻读强调的是集合的增减,而不是单条数据的更新。 ?...可以防止脏读、不可重复读、第一类更新丢失、第二类更新丢失的问题,不过还是会出现幻读。 串行化 串行化(Serializable),这是最高的隔离级别。
而由于一个事务在机器层面可能需要几条指令完成,这也意味着它在并发时会出现如下问题:脏读、不可重复读和幻读,下面以MySQL为例详细介绍在什么情况下可能会出现上述问题。...实验-> 不可重复读现象 清除test数据 truncate table test; ?...我们发现session2中执行两次select * from test会出现不同的结果,这就是不可重复读现象。...Repeatable Read(可重复读) 这是MySQL默认隔离级别,解决不可重复读,但是还会出现存在幻读现象。...但是Repeatable Read中提交的事务对其他事务是不可见的,显然违反了隔离性。 Serializable(串行化) 串行化解决了脏读、不可重复读、幻读现象,但是效率会比较低下。
不可变集合性能优化:JDK 17与JDK 21中不可变集合的创建与性能改进有哪些? 引言 不可变集合是Java开发中提高代码安全性和性能的关键特性。...小数据量优化:适合小规模数据,不适合大规模集合的高效创建。 JDK 17中不可变集合的性能改进 1....核心改进: 共享空集合:对于空集合,List.of() 和 Set.of()会返回共享的单例空集合,避免重复创建实例。 优化存储结构:更紧凑的数据存储,减少了冗余对象和数组的使用。 2....JDK 21中不可变集合的进一步优化 1. 大规模集合的优化 JDK 21在创建大规模不可变集合时,进一步减少了内存拷贝操作,并优化了数据分布结构,提高了集合的创建速度。...A:JDK 21优化了大数据量场景下不可变集合的性能,减少了内存分配和临时对象的创建,提升了代码执行效率。 Q:哪些场景适合使用不可变集合? A: 数据不需要修改的场景。
什么是不可重复读 指在一个事务T1内,多次读同一数据。在这个事务T1还没有结束时,另外一个事务T2修改并提交了该同一数据。那么,事务T1两次读到的数据可能是不一样的。...这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。...也就是说,重复读取账户的时候,账户余额变化了。这就是不可重复读。 总结 不可重复读发生的核心就是在于小明的整个事务中,可以读到小丽提交了的事务所改变的数据。
使用Set.of()创建不可变Set Set.of()方法用于创建一个不可重复且不可变的Set。...// 抛出UnsupportedOperationException } } 输出结果: 不可变Set: [猫头虎, Java, 不可变集合] 注意事项: Set.of()不允许有重复元素,否则会抛出...重复元素:Set.of() 和 Map.of()不允许重复元素或键。 线程安全:不可变集合天然线程安全,适合多线程读取场景。 性能:不可变集合减少了额外的锁开销,适合频繁读取的场景。...总结:JDK 9+ 不可变集合的优势与用法 方法 适用集合 特点 List.of() List 快速创建不可变List,元素可重复。 Set.of() Set 快速创建不可变Set,元素不可重复。...Map.of() Map 快速创建不可变Map,键不可重复。 Map.ofEntries() Map(大规模数据) 支持超过10个键值对的不可变Map。
最近在读 《MySQL 技术内幕 InnoDB 存储引擎》,里面提到的各种概念都很新鲜,以前听说过脏读、幻读、不可重复读,但是对于概念不甚了解,于是查了一下,这里做个笔记。...不可重复读 一个事务读取同一条记录2次,得到的结果不一致: 由于在读取中间变更了数据,所以会话 1 事务查询期间的得到的结果就不一样了。...授权读取 也称为读提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。...可重复读取(Repeatable Read) 可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻读数据。这可以通过“共享读锁”和“排他写锁”实现。...尽管它会导致不可重复读、幻读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元); 2.事务的四大特性ACID...不可重复读: 对于两个事务T1和T2,T1读取了一个字段,然后T2更新了该字段并提交之后,T1再次提取同一个字段,值便不相等了。 重复读取的结果不一致的情况发生。 3....UNCOMMITTED级别不做演示,其隔离性最低,会出现脏读、不可重复读、幻读等所有情况。...无法避免重复读(一个事务读取到另一个事务已经提交的数据) REPEATABLE READ避免不可重复读的情况发生,下面来看演示: 1....避免不可重复读(一个事务读取到另一个事务已经提交的数据) 2.
领取专属 10元无门槛券
手把手带您无忧上云