1.根据集合的某个属性值,给集合做排序. 1.实体类要实现Comparable接口 public class IndustryInfo implements Comparable<IndustryInfo IndustryInfo::getNum).reversed()).collect(Collectors.toList()); 2.排除某个特定元素 List<Map<String, Object>> list8 List<Map<String, Object>>> age = list.stream().collect(Collectors.groupingBy(map -> map.get("age"))); 8. onlyPass.stream().collect(Collectors.maxBy(Comparator.comparing(ApprovalLogVo::getApprovalTime))).get(); 10.汇总集合中的某个对象属性
在此之前我们来看看整个 Java 集合框架的类图: ? 接下来根据不同的分类角度来进行分类,首先是按集合类别: 集合类别 线性集合类 说到线性集合类我们脑海里第一个想到的基本上都是 ArrayList ,确实,这个类太常用了,当然除了这个类,Java 集合框架中还有一些其他的有用的线性集合类 当出现 hash 值冲突的时候,先采用链地址法处理(使用单链表将冲突的元素连接),当某个冲突链表的长度不小于 8 时,将其树化(转换为红黑树,加快查找速度)。 HashMap 是非线程安全的类。 一般集合类 为了统一,这里给它起了个名字叫一般集合类,其实就是 Set 了。 因为集合类内部都是借助了对应的 Map 来进行实现,所以理解了 Map 接口的相关具体类,Set 的相关类就非常简单了。 不同的是 Arrays 更多的是针对数组和线性集合,而 Collestions 针对的更多是集合框架中的类。
进程通信 进程通信是指进程之间的信息交换 交换的信息量:一个状态或数值,上千个字节。 进程通信的分类 1)低级通信:进程的互斥和同步 2)高级通信: 指用户可直接利用OS提供的一组通信命令,高效地传送大量数据的一种通信方式。对用户透明。 高级通信分类 共享存储器系统 消息传递系统 管道通信 共享存储器系统 (1)共享数据结构的通信方式 进程之间通过某种数据结构,如缓冲池进行通信属于低级通信方式。 (2)共享存储区通信方式 为了传送大量信息,在存储器中划出一块共享存储区,进程可通过对共享存储区进行读或写来实现通信,属于高级通信方式。 消息传递系统 消息交换的单位是消息或报文,分两种: (1)直接通信方式 (2)间接通信方式 计算机网络中将消息称为报文。
集合通信集合通信基础了解通信相关术语:图片了解常见网络拓扑结构:典型拓扑结构优缺点了解场景硬件架构图:1.A+K(8P):图片通过HCCS实现两两互联(Full Mesh),如NPU与NPU之间,CPU 在Full Mesh网络中,任何两个节点之间都可以直接通信。 2.A+X(16P):双mesh组网(8P Full-mesh)集合通信原语一对多Broadcast:将通信域内root节点的数据广播到其他rank图片 Scatter:将通信域内root节点的数据均分并散布至其他 那就将它的参数进一步切分到多个节点上,每个节点计算部分结果,再通过通过节点间的通信获取到最终结果,这就是张量并行。简言之,流水并行是模型的层间切割,而张量并行是模型的层内切割。 参考资料通信基础概述HCCL集合通信库深度学习的分布式训练与集合通信(一)深度学习的分布式训练与集合通信(二)深度学习的分布式训练与集合通信(三)典型拓扑结构优缺点
《Java集合详解系列》是我在完成夯实Java基础篇的系列博客后准备开始写的新系列。 所以:对于已知的情景,请为集合指定初始容量。 所以若我们事先已知集合的使用场景,知道集合的大概范围,我们最好是指定初始化容量,这样对资源的利用会更加好,尤其是大数据量的前提下,效率的提升和资源的利用会显得更加具有优势。 asList的缺陷 在实际开发过程中我们经常使用asList讲数组转换为List,这个方法使用起来非常方便,但是asList方法存在几个缺陷: 避免使用基本数据类型数组转换为列表 使用8个基本类型数组转换为列表时会存在一个比较有味的缺陷 asList(T... a) { return new ArrayList<>(a); } asList接受的参数是一个泛型的变长参数,我们知道基本数据类型是无法发型化的,也就是说8个基本类型是无法作为
SQL进阶-8-利用SQL进行集合运算 SQL本身就是以集合作为基础的,本文中记录的是利用各种集合运算。 交集 并集 差集 异或集 交集 内连接相当于是求两个集合的交集,相当于是集合的积(intersect) select_statment_1 intersect select_statment_2 -- A.name as name from tableA A join tableB B on A.name = B.name; -- 通过相同的字段连接起来 并集 并集,其实就是全外连接的使用,相当于是求集合的和 i.item = s2.item and s1.shop = s2.shop -- 指定连接条件 where s2.item is null ); 异或集(A并B)-(A交B) 异或指的是两个集合的并集除去它们的交集之外的集合
相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便捷。 不过,这一问题在Java 8中得到了改善,Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。本文就来介绍下如何使用Stream。 2 Stream的创建 在Java 8中,可以有多种方法来创建流。 1、通过已有的集合来创建流 在Java 8中,除了增加了很多Stream相关的类以外,还对集合类自身做了增强,在其中增加了stream方法,可以将一个集合类转换成流。 除此以外,还有一个parallelStream方法,可以为集合创建一个并行流。 这种通过集合创建出一个Stream的方式也是比较常用的一种方式。
1.根据集合的某个属性值,给集合做排序. 1.实体类要实现Comparable接口 public class IndustryInfo implements Comparable<IndustryInfo IndustryInfo::getNum).reversed()).collect(Collectors.toList()); 2.排除某个特定元素 List<Map<String, Object>> list8 List<Map<String, Object>>> age = list.stream().collect(Collectors.groupingBy(map -> map.get("age"))); 8.
ArrayList ArrayList是最最常用的集合类了,真的没有之一。下面的分析是基于1.8.0_261源码进行分析的。 构造方法 构造方法有三个,可以指定容量,可以指定初始的元素集合,也可以什么都不指定。 好像上面的源代码中我们没有看到,其实是有的,所谓扩容嘛,就是容量不够了,那么容量不够的时候只会发生在初始化一个集合的时候或者是增加元素的时候,所以是在add()方法里面去调用的。 ArrayListSpliterator:继承于Spliterator,Java 8 新增的迭代器,基于索引,二分的,懒加载器。 8. 小结一下 ArrayList是基于动态数组实现的,增加元素的时候,可能会触发扩容操作。扩容之后会触发数组的拷贝复制。
vue是数据驱动视图更新的框架,所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 非父子组件之间通信(兄弟组件、隔代关系组件等) 本文会介绍组件间通信的8种方式如下图目录所示:并介绍在不同的场景下如何选择有效方式实现的组件间通信方式,希望可以帮助小伙伴们更好理解组件间的通信。 一、props / $emit 父组件通过props的方式向子组件传递数据,而通过$emit 子组件可以向父组件通信。 1. 也要注意得到$parent和$children的值不一样,$children 的值是数组,而$parent是个对象 总结 上面两种方式用于父子组件之间的通信, 而使用props进行父子组件通信更加普遍; 二者皆不能用于非父子组件之间的通信。
ArrayList ArrayList是最最常用的集合类了,真的没有之一。下面的分析是基于1.8.0_261源码进行分析的。 构造方法 构造方法有三个,可以指定容量,可以指定初始的元素集合,也可以什么都不指定。 好像上面的源代码中我们没有看到,其实是有的,所谓扩容嘛,就是容量不够了,那么容量不够的时候只会发生在初始化一个集合的时候或者是增加元素的时候,所以是在add()方法里面去调用的。 ArrayListSpliterator:继承于Spliterator,Java 8 新增的迭代器,基于索引,二分的,懒加载器。 8. 小结一下 ArrayList是基于动态数组实现的,增加元素的时候,可能会触发扩容操作。扩容之后会触发数组的拷贝复制。
继承关系 JAVA-集合梳理-d2235945b48b4db7993b7e8f133b47be.png 2.
3.addAll(int index, Collection 用获取到的 listIterator 逐个添加集合中的元素,这就要考验 ListIterator.add 方法的实现效率了,总不能每次都后移一位吧 的确在目前集合框架中 AbstractSequentialList 的唯一实现类 LinkedList 实现的 ListIterator 中,由于 LinkedList 的双休链表特性,每次 add 在 Java 集合深入理解:AbstractList 中我们介绍了 RandomAccess,里面提到,支持 RandomAccess 的对象,遍历时使用 get 比 迭代器更快。
文章目录 前言 一、订阅类-订阅方法缓存集合 二、事件类型-订阅者集合 三、订阅对象-事件类型集合 前言 首先声明几个数据结构 , 参考 【EventBus】EventBus 源码解析 ( 注册订阅者总结 | 从封装的数据结构角度分析 EventBus ) 博客 , 仿 EventBus , 设置几个重要的集合 ; 一、订阅类-订阅方法缓存集合 ---- METHOD_CACHE 作用仅用于作为订阅方法的缓存类 >, List<MySubscriberMethod>> METHOD_CACHE = new HashMap<>(); 二、事件类型-订阅者集合 ---- 事件类型-订阅者集合 : Map<Class ; 在构造函数中初始化该集合 ; CopyOnWriteArrayList 在写入数据时会拷贝一个副本 , 写完之后 , 将引用指向新的副本 , 该集合的线程安全级别很高 ; 该集合的重要作用就是进行消息转发 >, CopyOnWriteArrayList<MySubscription>> subscriptionsByEventType; 三、订阅对象-事件类型集合 ---- 订阅对象-事件类型集合 : Map
本篇文章带大家详细了解一下vue中8种组件通信方式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 image vue是数据驱动视图更新的框架,所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 非父子组件之间通信(兄弟组件、隔代关系组件等) 本文会介绍组件间通信的8种方式如下图目录所示:并介绍在不同的场景下如何选择有效方式实现的组件间通信方式,希望可以帮助小伙伴们更好理解组件间的通信。 也要注意得到$parent和$children的值不一样,$children 的值是数组,而$parent是个对象 总结 上面两种方式用于父子组件之间的通信, 而使用props进行父子组件通信更加普遍; 二者皆不能用于非父子组件之间的通信。
由于项目采用的技术栈是Vue, 平常开发只注重功能实现了,接下来陆续会对 Vue 深入分析,来封装常用业务组件,以及Vue源码解析 本章将是对Vue 组件通信的8方法总结,日常开发组件通信密切 ,熟悉组件通信可以更好的开发业务。 $refs.refName.子组件属性 / 子组件方法 $children : 当前实例的子组件,它返回的是一个子组件的集合。如果想获取哪个组件属性和方法,可以通过 this. 通信数据比较简单时,可以采用这种 方案,项目比较庞大,可以采用 Vuex . vue .js /* * @Description: * @Author: ZhangXin * @Date: 2021 Vuex 这里就不介绍了,完了单独写一篇文章精讲Vuex 8. provide 和 inject 实现父组件向子孙孙组件传值。
8.Condition 控制线程通信 前言 前一篇我们讲述了 同步锁 Lock,那么下面肯定就要讲解一下 同步锁 Lock 如何控制线程之间的通讯。 这个时候,就需要使用线程的通信 wait() 和 notifyAll() 的方法来处理了。 image-20201103220804721 7.4 测试执行 在生产与消费方法中,使用 while 解决了 虚假唤醒之后,下面来执行看看,如下: image-20201103220928349 8.
,内核提供的这种机制称为进程间通信。 1 匿名管道通信 ---- 匿名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 3 有名管道通信 ---- 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。 8 套接字通信 ---- 套接字( socket ) : 套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。
List 集合转Set 集合 1. List 集合和Set 集合的区别 在说如何List集合转Set 集合之前我们先回顾一下 List 集合和Set 集合的区别, 细致上说List 集合和Set 集合的区别还是有蛮多的有兴趣的同学可以去看一下源码 ,粗糙地讲List 集合和Set 集合的区别主要有那么几点 。 的数据结构是线性结构所以它在遍历的时候特别快 (4)set 是无序的不能插入重复元素 (5) Set 的数据结构是哈希表所以在频繁添加或移除元素的业务场景下特别有优势 2.如何优雅地把List 集合转 Set 集合?
由于项目采用的技术栈是Vue, 平常开发只注重功能实现了,接下来陆续会对 Vue 深入分析,来封装常用业务组件,以及Vue源码解析 本章将是对Vue 组件通信的8方法总结,日常开发使用组件通信非常密切 ,熟悉组件通信可以更好的开发业务。 $refs.refName.子组件属性 / 子组件方法 $children : 当前实例的子组件,它返回的是一个子组件的集合。如果想获取哪个组件属性和方法,可以通过 this. 通信数据比较简单时,可以采用这种 方案,项目比较庞大,可以采用 Vuex . ❞ vue .js /* * @Description: * @Author: ZhangXin * @Date: Vuex ❝这里就不介绍了,完了单独写一篇文章精讲Vuex ❞ 8. provide 和 inject 实现父组件向子孙孙组件传值。