【Java源码分析】集合框架-Collections工具类-Arrays工具类
集合框架Collection 和Collections和Arrays工具类
一开始总是搞不清楚Collection和Collections的区别,不过看下代码应该很清楚,一个是接口,一个是工具类
Collection是集合类的上级接口,子接口主要有Set 和List、Map。平时用到的一些集合类都是该接口的间接实现类。
Collections是针对集合类的一个帮助类,提供了操作集合的工具方法:一系列静态泛型方法实现对各种集合的搜索、排序、线程安全化等操作。如果对于一些排序算法或者一些集合操作的工具类的实现不是很熟悉,可以到这个帮助类里面找找灵感,比看书有意思多了而且还可以学习到简洁高效的代码风格。
Arrays和Collections的区别在于Arrays是一个线性表操作工具类这一点在Collections和Arrays的源码注释中可以看出,This class contains various methods for manipulating arrays (such as sorting and searching).而Collections中是This class consists exclusively of static methods that operate on or return collections.
Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的版本,但是如果要用线程安全的结合类,首选Concurrent并发包下的对应的集合类。
Collection实现类的UML层次结构如下
集合主要实现类及继承关系
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
|
│├HashSet
│├TreeSet
│
└Queue
|
│├LinkedList
│├PriorityQueue
Map
├Hashtable
├HashMap
└TreeMap
除了上述的Queue List Set Map以及两个工具类之外,集合框架中还有一个最常用的部分就是迭代器Iterator.集合框架主要学习部分也就是这4类集合实现以及迭代器和这两个工具类
List接口通常表示一个列表,主要存放一些有序元素。元素可以重复,常用实现类为ArrayList和LinkedList,Vector。另外,LinkedList还是实现了Queue接口,因此也可以作为队列使用。
Set接口通常表示一个集合,其中的元素不允许重复(放入set中的元素通常都需要复写hashCode()和equals()方法)。常用实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap实现的,而TreeSet是通过Map中的TreeMap实现的。另外,TreeSet还实现了SortedSet接口,因此是有序的集合(需要额外的实现Comparable接口实现排序的比较规则)。
Map接口是一个映射接口,其中的每个元素都是一个key-value键值对。抽象类AbstractMap通过适配器模式实现了Map接口中的大部分函数,TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现,另外,HashTable直接实现了Map接口。
Queue接口是一个队列接口,用的比较少,而且其实现类LinkedList也实现了List接口。
Iterator是遍历集合的迭代器,不能遍历Map,只用来遍历Collection。
集合接口的主要实现类之间的对比
在线程安全性方面List中只有Vertor是线程安全的,Map中只有HashTable是线程安全的,如果想要使用线程安全的集合,一方面可以通过Collections帮助类另外一个方面是直接使用Concurrent包下面的线程安全集合。
【Java源码分析】集合框架-Collections工具类-Arrays工具类相关推荐
- Java源码分析集合部分总结
按照自己的理解 集合类分为多个分支 一个是Collection派系的集合,一个是Map派系的集合. 两者分别支撑起来整个集合的阵营. Collection派系的主要是List.Queue.Set. M ...
- 【Java源码分析】Java8的HashMap源码分析
Java8中的HashMap源码分析 源码分析 HashMap的定义 字段属性 构造函数 hash函数 comparableClassFor,compareComparables函数 tableSiz ...
- 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...
- java 源码分析_Java 源代码编译成 Class 文件的过程分析
原标题:Java 源代码编译成 Class 文件的过程分析 在上篇文章< Java三种编译方式:前端编译 JIT编译 AOT编译 >中了解到了它们各有什么优点和缺点,以及前端编译+JIT编 ...
- SpringMVC源码分析_框架原理图
SpringMVC源码分析_框架原理图 ...
- Activiti源码分析(框架、核心类。。。)
Activiti源码分析(框架.核心类...) 目录 概 述 activiti源码分析(一)设计模式 总结: 相关工具如下: 分析: 小结: 参考资料和推荐阅读 LD is tigger foreve ...
- 【Java源码分析】Java8的ArrayList源码分析
Java8的ArrayList源码分析 源码分析 ArrayList类的定义 字段属性 构造函数 trimToSize()函数 Capacity容量相关的函数,比如扩容 List大小和是否为空 con ...
- [Abp vNext 源码分析] - 1. 框架启动流程分析
一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...
- Scrapy-redis 源码分析 及 框架使用
From:https://blog.csdn.net/weixin_37947156/article/details/75044971 From:https://cuiqingcai.com/6058 ...
- 坦克大战java源码分析(上)
坦克大战源码分析 一.mytank07.java文件分析 注:至上而下将不懂的语句.结构体含义.代码作用等作出解释: 1.包的使用 package com.haiding.tank_7; 包语句的语法 ...
最新文章
- MYSQL数值运算符和函数用法
- IO多路复用之select篇
- 敏捷中gwt含义_在GWT中序列化/反序列化Json
- linux操作系统之条件变量
- win7 vs2017 程序报错_windows + VS2017 配置libpytorch
- Ubuntu14.04如何使用root登录
- wcf分布式构架集群案例解决方案
- 安川g7接线端子图_图解西门子S7-300plc模拟量模块接线方法
- 《iOS 6高级开发手册(第4版)》——1.8节使用加速度移动屏幕上的对象
- 服务器硬盘安装win10系统,硬盘安装win10的方法
- WPS导入SQLSERVER的数据
- win10系统下删除文件夹失败,提示“找不到该项目”
- 第三届阿里云磐久智维算法大赛——GRU BaseLine
- HTML/CSS+JavaScript+jQuery
- 数据恢复之硬盘开盘维修检查(附图)
- 生成对抗网络——原理解释和数学推导
- 数据中心交换机的五大法宝
- python 期货现货差价监测_数字货币期货现货差价监控
- python之Matplotlib
- 说句心里话python怎么写_说句心里话作文
热门文章
- vue在created调用点击方法_vue中created、mounted等方法整理
- tensorflow 无法执行sess =tf .session ()_深度学习|费解的tensorflow
- matlab求二元函数极值算法_最优化计算与matlab实现(3)——进退法
- 360无痕浏览器_高效使用浏览器,探索你不知道的实用功能
- redis 内存不足 排查_redis莫名数据被清问题排查记录
- eslint 无法格式化ts_vscode-eslint的踩坑实践--typescript无法格式化
- i++ 和++i的区别
- 远哥谈 使用WebSocket开发在线实时看远程服务器log日志的工具
- 东芝发布15nm SG5固态硬盘 容量高达1TB
- zabbix专题:第十二章 zabbix proxy分布式监控配置