Java集合框架一览笔录

1、集合概念

集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所以的集合类都位于java.util包下,后来为了处理多线程环境下的并发安全问题,java5还在java.util.concurrent包下提供了一些多线程支持的集合类。

集合分为两大类:Collection、Map。

Collection(集合),每个元素存储单个数据(Java基本数据类型或者对象),通常这些元素都服从某种规则

  1) List必须保持元素特定的顺序

  2) Set不能有重复元素

  3) Queue保持一个队列(先进先出)的顺序

Map(哈希),每个元素存储 "键值对"的 数据。

2、集合与数组的区别?

数组在初始化时候就必须指定数组长度,因此数组只能保存固定个数的元素。

集合在初始化时候一般可以不指定集合大小,因此集合可以保存不确定个数的元素。

另外,集合的元素,存储可以不仅是单个数据,还可以是 键值对 的数据。

3、集合类架构层次

Arrays和Collections是用来操作数组、集合的两个工具类,例如在ArrayList和Vector中大量调用了Arrays.Copyof()方法,而Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的集合实现,如果要用线程安全的结合类,首选java.util.concurrent并发包下的对应的集合类。

java.util.concurrent并发包提供了基本线程安全的各类容器。其中队列分为阻塞队列、非阻塞队列。

4、迭代器Iterator

通过Iterator,可以遍历任何Collection类集合,Map的键集合或者值集合。

迭代器允许调用者在迭代过程中移除元素。

使用迭代器更加线程安全,因为它可以确保,在当前遍历的集合元素被更改的时候,它会抛出ConcurrentModificationException。

什么是fail-fast

每次我们尝试获取下一个元素的时候,Iterator fail-fast属性检查当前集合结构里的任何改动。如果发现任何改动,它抛出ConcurrentModificationException。Collection中所有Iterator的实现都是按fail-fast来设计的。(并发容器则是fast-safe设计的)

fail-fast与fail-safe有什么区别?

Java.util包中的所有集合类都被设计为fail-fast的,而java.util.concurrent中的集合类都为fail-safe的。Fail-fast迭代器抛出ConcurrentModificationException,而fail-safe迭代器从不抛出ConcurrentModificationException。

更多请期待。(2017.9.19)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

深入 char * ,char ** ,char a[ ] ,char *a[] 内核

http://blog.csdn.net/daiyutage/article/details/8604720

20420
来自专栏前端进阶之路

JS学习系列 06 - 变量对象

上一节我们讨论了执行上下文,那么在上下文中到底有什么内容,为什么它会和作用域链扯上关系,JS 解释器又是怎么找到我们声明的函数和变量,看完这一节,相信大家就不会...

12520
来自专栏C/C++基础

C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解

模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程。对于函数模板而言,模板实例化之后,会生成一个真正的函数。而类模板经过实例化之后,只是完成了类的定义...

24120
来自专栏Phoenix的Android之旅

动态代理-进阶高级开发必学技能

关于代理模式的话题有很多, 在开发中经常用到的应该是静态代理模式,能很好的去耦合。 动态代理是代理模式的另外一种实现。

9930
来自专栏尚国

PHP反序列化漏洞

这里你可以看到, 我代码里的类定义为: class F, 这个序列化就是 F, 我定义变量名字是filename, 它这里也是 filename, 我们可以修改...

12420
来自专栏决胜机器学习

PHP数据结构(二)——链式结构线性表

PHP数据结构(二)——链式结构线性表 (原创内容,转载请注明来源,谢谢) 线性表分为顺序结构和链式结构,链式结构里每一个数据单元除了有数据之外,还有一个空间...

54370
来自专栏用户2442861的专栏

static在C和C++中的用法和区别

http://blog.csdn.net/skyereeee/article/details/8000512

34210
来自专栏康怀帅的专栏

PHP 面向对象

面向对象三大特性:封装、继承、多态。 官方文档:http://php.net/manual/zh/language.oop5.php 要创建一个类的实例,必须使...

39670
来自专栏程序生活

Leetcode-Easy 876. Middle of the Linked List

结题思路主要是通过快慢指针来找到中间节点:快指针的移动速度是慢指针移动速度的2倍,因此当快指针到达链表尾时,慢指针到达中点。

10430
来自专栏算法channel

面试必备|单链表反转思路图形解析

01 — 单链表 链表玩的是指针操作,非常容易出错,尽管看似很简单。 先定义一种单链表,JAVA(或C#)描述的数据结构如下: public class...

68550

扫码关注云+社区

领取腾讯云代金券