Immutable Collections for Java (Java不变集合类) 提供了不变的、持久化的 Java 集合类,对集合的元素添加和删除都是创建一个新的拷贝来进行。每份拷贝都共享几乎所有其原来的结构,为了最小化内存消耗,该库包含一个 singly-linked (cons/cddr style) list/stack, 一个整数的基于树的索引列表,一个 2-3 叉树的 map,一个哈希树 map,一个哈希和树的集合。所有集合提供了不变的游标作为标准的迭代器类。提供一个工具类来使用函数风格的算法访问数据。
英文原文链接:https://www.javaspecialists.eu/archive/Issue248.html Exciting news. We now have “immutable collections” in Java 9. Just like Scala (not really). 这真是一个令人兴奋的消息,Java 9 像Scala一样支持了不可变集合. For exampl
不可变集合 Oracle 公司引入一些方便使用的工厂方法,用于创建不可变集合 List,Set,Map 和 Map.Entry 对象。这些高效实用的方法可用来创建空或者非空集合对象。 在 Java SE 8 和更早版本中,我们常用类似 unmodifiableXXX 的集合类方法创建不可变集合对象。举个例子,比如我们想创建一个不可变的 List 对象,可能使用到Collections.unmodi
介绍 Oracle 在2017年3月左右发布Java新版本:Java SE9。陆续我会发表一系列有关Java SE 9新功能的文章。这是本系列的第三篇。 我已经发表了几篇有关Java SE 9新特性的文章。在阅读这篇文章之前,请先阅读以下文章: 在本文中,我会带着大家一起来讨论一下Java SE 9新功能:Immutable List的 工厂方,在讲解的过程中会穿插一些简单而合适的示例。 Java
前言:上次我们分析Collection接口的一些通用功能,还有一些源码的简单分析,接下来我们继续从上往下分析,了解每个接口的特性,以及每个接口下面的实现类底层源码是如何实现的. 一、List接口的特性 官方描述: 该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。 首先List接口继承了Collection接口,是一个有序的集合与
有时候我会用Map.of(k1, v1, k2, v2)来快速构建一个Map。 顺便看了下源代码,其实Map.of的实现是这样子的: static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) { return new ImmutableCollections.MapN<>(k1, v1, k2, v2); } 这里的Ma
1 Lists package com.collections; import com.google.common.collect.Lists; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.IntStream; impo
java之不可变对象1(immutable objects in java) an immutable object is an object whose state cannot be modified after it is created. 不可变对象一旦被创建就它的状态就不能被修改。 A classic example of an immutable object is an instan
Googgle guava ImmutableCollections 参考文档 Google Guava ImmutableCollections官方文档 Immutable objects have many advantages(不可变类有很多的好处) Safe for use by untrusted libraries(安全的使用不受信任的库),我记得Effective Java中看到过,
Collections class in java is a useful utility class to work with collections in java. The java.util.Collections class directly extends the Object class and exclusively consists of the static methods t
在项目开发过程中,有时需要将类定义成不可变(Immutable)类型,例如在一些暴露给第三方的接口参数对象,对于复杂多层次的自定义类,手工编写Immutable类是个繁琐且容易出错的工作,为此写了一个Immutable自动生成工具。 1. mutable(可变)和immutable(不可变)类型的区别 可变类型的对象:提供了可以改变其内部数据值的操作,其内部的值可以被重新更改。 不可变数据类型:其
Google Guava Collections 使用介绍 简介 Google Guava Collections 是一个对 Java Collections Framework 增强和扩展的一个开源项目。由于它高质量 API 的实现和对 Java特性的充分利用,使得其在 Java 社区受到很高评价。笔者主要介绍它的基本用法和功能特性。 使用介绍 Google Guava Collections(
Collections是JDK提供的工具类,同样位于java.util包中。它提供了一系列静态方法,能更方便地操作各种集合。 注意Collections结尾多了一个s,不是Collection! 我们一般看方法名和参数就可以确认Collections提供的该方法的功能。例如,对于以下静态方法: public static boolean addAll(Collection<? super T> c
ImmutableMap 的作用就是:可以让java代码也能够创建一个对象常量映射,来保存一些常量映射的键值对。 分析以下情景,来具体讨论这个的好处。 以下是在js前台的代码,假设现在有需求如下: 根据数据库存的某个key字段,来获得不同的提示名字。有以下3种处理方法 1:用 多个 if else 语句,只要新添加个字段,你就得添加个 if else ,差评 2:用 switch case 语句,
Iterator Java的集合类都可以使用for each循环,List、Set和Queue会迭代每个元素,Map会迭代每个key。以List为例: List<String> list = List.of("Apple", "Orange", "Pear"); for (String s : list) { System.out.println(s); } 实际上,Java编译器并不知
前言 不可变类在日常工作中经常用到,如JDK中的String类和所有的包装类。使用不可变类有很多好处,其中之一就有多线程里很重要的线程安全。还有使用简单,不用担心被人有意无意改掉实例的状态等优点。 那么如何实现一个不可变类呢?本文将介绍在Java中如何实现一个不可变类并用实战代码来帮助读者理解。 参考 JSR 133 (Java Memory Model) FAQ Java Language Sp