此二者在日常编程中,用得太频繁,所以多少有必要记录下,便于需要的时候翻翻。

但鉴于它们的后代太多,逐一牢记有有点难度,所以学习上应该把握以下几点即可:

  1. 含义
  2. 重要区别
  3. 常用的实现类和工具
  4. 关注要点:有序性,唯一性,更新速度,查找速度,线程安全,更新方式

在日常工作中,应当在思考设计目的的基础上选择需要的实现类,例如是考虑效率还是线程安全,是要求FIFO还是FILO。

如果以下就知道要用哪一种,那么就使用,否则找找参考资料。参考资料可以是专业书籍,也可以是权威的网站或者是博客。

一、基本概念以及集合和映射的区别

1.1 Collection-集合

用于保存若干对象的对象。本质上使用数组存储每个元素,每个元素的类型不必都一样,也不要求都是有序存放。

数组通常只存放原本身,不存储对于的内容,这是和映射最主要的区别。

1.2 Map-映射

顾名思义,需要一个对象元素必须有两个对象对应:键和值,或者是key和value。

把key翻译为“键”可能不是那么贴切,也许可以意译为“指引”,而"value"可以意译为“涵义”或者“内容”。

1.3集合和映射的区别和相同点

要逐一细细列出所有,没有必要。 这里只列出一条根本性的区别:集合通过索引或者内容查找,隐射通过“指引”查找。

相同点:最重要一条:它们都实现了迭代接口,可以通过这个接口来遍历元素。

1.4其它一些概念

  • fail-fast

可以参见这个 java中的fail-fast(快速失败)机制_Howard_14的博客-CSDN博客_fail-fast机制

简单翻译为“快速失败”,作用在于并发的场景中,提醒用户这个操作是不安全的,让用户用个安全的操作。

  • Serial和Serializable

系列化。java类型中集合和map的代码写得比较特别,其中一部分就是序列化。好多类型都个性化了writeObject方法。

二、常见后代/实现类介绍

2.1、Collection接口下几个常见后代

  • ArrayList(阵列列表)--
  • LinkedList(链接列表),
  • vector(矢量列表),为什么叫“矢量”有点让人迷惑,是否因为词穷了?除了有大小还有什么了?
  • SortedSet /TreeSet(有序套)
  • Queue(队列)

arrayList,LinkedList,vector的区别

Vector、ArrayList和LinkedList有什么区别_shumeigang的博客-CSDN博客_arraylist vector和linkedlist的区别

1.基本区别:三个类都实现了List接口,都是有序集合,数据是允许重复的;ArrayList 和Vector都是基于数组实现存储的,集合中的元素的位置都是有顺序即连续的;LinkedList是基于双向链表实现存储的,集合中的元素的位置是不连续的

2.性能区别:Vector和ArrayList底层实现原理一致,但是Vector是线程安全的,因此性能比ArrayList差很多;LinkedList相比于集合Vector和ArrayList在插入,修改,删除等操作上速度较快,但是随机访问的性能较差

3.安全区别:Vector是使用了synchronized同步锁是线程安全的,ArrayList和LinkedList都是线程不安全的

4.原理区别:ArrayList与Vector都有初始的容量大小,当存储的元素的个数超过了容量时,就需要增加存储空间,Vector默认增长为原来两倍,而ArrayList的增长为原来的1.5倍;
ArrayList与Vector都可以设置初始空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法

ArrayList和LinkedList区别

1.ArrayList和LinkedList区别 - 努力的达子 - 博客园 (cnblogs.com)

1.1. ⾸先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的
1.2. 由于底层数据结构不同,他们所适⽤的场景也不同,ArrayList更适合随机查找,
LinkedList更适合删除和添加,查询、添加、删除的时间复杂度不同
1.3. 另外ArrayList和LinkedList都实现了List接⼝,但是LinkedList还额外实现了Deque接⼝,所以
LinkedList还可以当做队列来使⽤

treeSet的说明

TreeSet详解和使用示例_动力节点Java学院整理_java_脚本之家 (jb51.net)

(01) TreeSet实际上是TreeMap实现的。当我们构造TreeSet时;若使用不带参数的构造函数,则TreeSet的使用自然比较器;若用户需要使用自定义的比较器,则需要使用带比较器的参数。
(02) TreeSet是非线程安全的。
(03) TreeSet实现java.io.Serializable的方式。当写入到输出流时,依次写入“比较器、容量、全部元素”;当读出输入流时,再依次读取。

treeSet的主要作用是排序。

queue(队列)

队列还是很常用的数据类型,可以参阅:

JAVA队列( Queue ) 详解_java叶新东老师的博客-CSDN博客_java queue   -- 简单的定义和关系

Java Queue队列的用法(非常全面)_微学苑 (weixueyuan.net)

2.2、map接口的几个常见后代

  • TreeMap  -- 主要用于排序
  • HashMap --优点:随机获取效率较高

没有太多需要介绍的。

2.3、糅合Collection和Map的类型

TreeSet

代码很有意思,看看它的构造和add方法:

public TreeSet() {
this(new TreeMap<>());
} TreeSet(NavigableMap<E,Object> m) {
this.m = m;
} public boolean add(E e) {
return m.put(e, PRESENT)==null;
}

2.4并发

有人写了比较全的资料

java集合大全(二)并发_yunyun1886358的博客-CSDN博客_java并发集合类

Java软件开发|高并发编程篇之——安全访问的集合(1) (baidu.com)

这两个资料的价值分别是名词解析和Collections工具类。

有必要把一些名词重复下:

  • ArrayBlockingQueue
  • DelayBlockingQueue
  • TransferQueue
  • LinkedTransferQueue
  • PriorityBlockingQueue
  • SynchronousQueue
  • ConcurrentHashMap
  • ConcurrentSkipListMap
  • ConcurrentSkipListSet
  • CopyOnWriteArrayList
  • CopyOnWriteArraySet

三、常见工具

3.1 Collection常见工具类

  • Collections-范围大一些,此外提供了一些并发的东西
  • Arrays,范围小一些,主要针数组的,也可以和List挂钩上

3.2 Map常见工具类

自带的好像没有发现,以后如有发现再补充。

关于Collection和Map的笔记的更多相关文章

  1. 【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别

    原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,Hash ...

  2. Java特性-Collection和Map

    创建博客的目的主要帮助自己记忆和复习日常学到和用到的知识:或有纰漏请大家斧正,非常感谢! 之前面试,被问过一个问题:List和Set的区别. 主要区别很明显了,两者都是数组形式存在的,继承了Colle ...

  3. Java Collection或Map的同步

    新集合也提供了能防止多个进程同时修改一个容器内容的机制.若在一个容器里反复,同时另一些进程介入,并在那个容器中插入.删除或修改一个对象,便会面临发生冲突的危险.我们可能已传递了那个对象,可能它位于我们 ...

  4. Collection和Map

    (1)Collection和Map的继承体系. (2)ArrayList(数组).LinkedList(链表).Vector(线程同步).Stack(继承Vector先进后出的栈).PriorityQ ...

  5. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  6. JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

    前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...

  7. Java集合类根接口:Collection 和 Map

    前言 在前文中我们了解了几种常见的数据结构,这些数据结构有着各自的应用场景,并且被广泛的应用于编程语言中,其中,Java中的集合类就是基于这些数据结构为基础. Java的集合类是一些非常实用的工具类, ...

  8. spark提示Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to [Lscala.collection.immutable.Map;

    spark提示Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot b ...

  9. 初识Java集合框架(Iterator、Collection、Map)

    1. Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 注意: 既有接口也有类,图中画实线的是类,画虚线的是接口 使用之前须要到导入java.util包 List ...

  10. JAVA集合详解(Collection和Map接口)

    原文地址http://blog.csdn.net/lioncode/article/details/8673391 在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父 ...

随机推荐

  1. 一、Doris演进史

    Apache Doris -- 为分析而生 Doris发展历程: Doris发展比较重要的关键节点与事件 #2008 - Doris1 :「筑巢引凤」的重要基石 早年,百度最主要的收入来源是广告.广告 ...

  2. FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放

    ​FFmpeg结合SDL可以播放音频文件,也能播放视频文件中的音频流,<FFmpeg开发实战:从零基础到短视频上线>一书第10章的示例程序playaudio.c支持播放mp3和aac两种格 ...

  3. 跟羽夏学 Ghidra ——简述

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...

  4. Ruby on Rails Active Record数据库常用操作

    目录 创建 批量插入 判断是否存在 Ruby on Rails 日期查询方法 文档地址: https://freed.gitee.io/rails-guides/active_record_query ...

  5. HTML link标签中preload,prefetch,dns-prefetch,preconnect,prerender

    Preload 在我们的浏览器加载资源的时候,对于每一个资源都有其自身的默认优先级,倘若我们能修改每一个资源的默认优先级,那我们几乎可以按照我们的预期加载想要加载的资源. 以谷歌浏览器为例,我们打开控 ...

  6. linux下安装来自github的package失败

    最近使用go来做web服务器,当然还是得使用框架,于是找了几个:beego.echo等,但是我在安装得时候总是出现这类报错 cannot find package "github.com/l ...

  7. 谈谈 Spring 的过滤器和拦截器

    前言 我们在进行 Web 应用开发时,时常需要对请求进行拦截或处理,故 Spring 为我们提供了过滤器和拦截器来应对这种情况.那么两者之间有什么不同呢?本文将详细讲解两者的区别和对应的使用场景. ( ...

  8. pageOffice插件 springboot实现服务器上Word文档在线打开编辑保存

    需求: 在oa系统上,想实现在线,服务器上doc,docx文档,在web打开,编辑.编辑后,可以再同步保存到服务器端. 开发环境: java springboot,thymeleaf 服务器环境: 无 ...

  9. java学习之旅(day.12)

    异常机制(Exception) 异常指程序运行中出现的不期而至的各种状况 异常分类: 检查性异常:用户输入错误引起的异常 运行时异常:写的时候未报错,但一运行就会报错, 错误(error):错误不是异 ...

  10. openstack的用户(user), 租户(tenant), 角色(role)概念区分

    用户身份管理有三个主要的概念: 用户Users租户Tenants角色Roles1. 定义 这三个概念的openstack官网定义(点击打开链接) 1.1 用户(User) openstack官网定义U ...