该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。

集合框架概述

Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*
Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)
Java集合工具包框架图(如下):

下面我们来剖析一下这张结构图:

集合框架主要由两大块组成:Collection和Map

Collection:Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。Collection包含了List和Set两大分支。

(1)、List:List是有序队列,每一个元素都有它的索引,索引值从0开始,List的实现类有ArrayList、LinkedList、Vector、Stack

(2)、Set:Set中的元素时不允许重复的,Set的实现类有HashSet、TreeSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。

Map:Map是一个映射接口,即即key-value键值对。Map中的每一个元素包含“一个key”和“key对应的value”。

AbstractMap是个抽象类,它实现了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。

Hashtable虽然继承于Dictionary,但它实现了Map接口。

接下来,再看Iterator。它是遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合。我们说Collection依赖于Iterator,是因为Collection的实现类都要实现iterator()函数,返回一个Iterator对象。ListIterator是专门为遍历List而存在的。

Collection详解

Collection是一个接口,它主要的两个分支是:List 和 Set

List和Set都是接口,它们继承于Collection。List是有序的队列,List中可以有重复的元素;而Set是数学概念中的集合,Set中没有重复元素
List和Set都有它们各自的实现类。

1、Collection简介

Collection接口的定义如下:

public interface Collection<E> extends Iterable<E> {}

  

它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等等。

Collection的API:

// Collection的API
abstract boolean add(E object) //添加一个元素
abstract boolean addAll(Collection<? extends E> collection) //将指定集合中的所有元素添加到此集合
abstract void clear() //从此集合中删除所有元素
abstract boolean contains(Object object) //如果此集合包含指定的元素,则返回 true
abstract boolean containsAll(Collection<?> collection) //如果此集合包含指定集合中的所有元素,则返回 true
abstract boolean equals(Object object) //将指定的对象与此集合进行比较以获得相等性,这个方法在之后会介绍到
abstract int hashCode() //返回此集合的哈希码值
abstract boolean isEmpty() //如果此集合不包含元素,则返回 true
abstract Iterator<E> iterator() //返回此集合中元素的迭代器
abstract boolean remove(Object object) //从该集合中删除指定元素的单个实例(如果存在)
abstract boolean removeAll(Collection<?> collection) //删除指定集合
abstract boolean retainAll(Collection<?> collection) //仅保留此集合中包含在指定集合中的元素
abstract int size() //返回此集合中的元素数
abstract <T> T[] toArray(T[] array) //返回一个包含此集合中所有元素的数组
abstract Object[] toArray() //返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型

  

大家可以先了解一下这些API,在后面具体的实现类中我会在具体介绍这些API的使用

2、List简介

List的定义如下:

public interface List<E> extends Collection<E> {}

  

List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。

关于API方面。既然List是继承于Collection接口,它自然就包含了Collection中的全部函数接口;由于List是有序队列,它也额外的有自己的API接口。主要有“添加、删除、获取、修改指定位置的元素”、“获取List中的子队列”等。

List的API:

//List中新增的API
abstract void add(int index, E object) //将指定的元素插入此列表中的指定位置
abstract boolean addAll(int index, Collection<? extends E> collection) //将指定集合中的所有元素插入到此列表中的指定位置(可选操作)
abstract E get(int index) //返回此列表中指定位置的元素
abstract int indexOf(Object object) //返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
abstract int lastIndexOf(Object object) //返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1
abstract ListIterator<E> listIterator(int index) //从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器
abstract ListIterator<E> listIterator() //返回列表中的列表迭代器(按适当的顺序)
abstract E remove(int index) //删除该列表中指定位置的元素
abstract E set(int index, E object) //用指定的元素(可选操作)替换此列表中指定位置的元素
abstract List<E> subList(int start, int end) //返回指定的 fromIndex (含)和 toIndex之间的列表部分的视图

  

3、Set简介

Set的定义如下

public interface Set<E> extends Collection<E> {}

  

Set是一个继承于Collection的接口,即Set也是集合中的一种。Set是没有重复元素的集合。

Set的API和Collection一样:

// Set的API
abstract boolean add(E object) //添加一个元素
abstract boolean addAll(Collection<? extends E> collection) //将指定集合中的所有元素添加到此集合
abstract void clear() //从此集合中删除所有元素
abstract boolean contains(Object object) //如果此集合包含指定的元素,则返回 true
abstract boolean containsAll(Collection<?> collection) //如果此集合包含指定集合中的所有元素,则返回 true
abstract boolean equals(Object object) //将指定的对象与此集合进行比较以获得相等性,这个方法在之后会介绍到
abstract int hashCode() //返回此集合的哈希码值
abstract boolean isEmpty() //如果此集合不包含元素,则返回 true
abstract Iterator<E> iterator() //返回此集合中元素的迭代器
abstract boolean remove(Object object) //从该集合中删除指定元素的单个实例(如果存在)
abstract boolean removeAll(Collection<?> collection) //删除指定集合
abstract boolean retainAll(Collection<?> collection) //仅保留此集合中包含在指定集合中的元素
abstract int size() //返回此集合中的元素数
abstract <T> T[] toArray(T[] array) //返回一个包含此集合中所有元素的数组
abstract Object[] toArray() //返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型

  

4、AbstractCollection简介

AbstractCollection的定义如下:

public abstract class AbstractCollection<E> implements Collection<E> {}

  

AbstractCollection是一个抽象类,它实现了Collection中除iterator()和size()之外的函数。
AbstractCollection的主要作用:它实现了Collection接口中的大部分函数。从而方便其它类实现Collection,比如ArrayList、LinkedList等,它们这些类想要实现Collection接口,通过继承AbstractCollection就已经实现了大部分的接口了。

5、AbstractList简介

AbstractList的定义如下:

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}

  

AbstractList是一个继承于AbstractCollection,并且实现List接口的抽象类。它实现了List中除size()、get(int location)之外的函数。
AbstractList的主要作用:它实现了List接口中的大部分函数。从而方便其它类继承List。
另外,和AbstractCollection相比,AbstractList抽象类中,实现了iterator()接口。

6、AbstractSet简介

AbstractSet的定义如下:

public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}

  

AbstractSet是一个继承于AbstractCollection,并且实现Set接口的抽象类。由于Set接口和Collection接口中的API完全一样,Set也就没有自己单独的API。和AbstractCollection一样,它实现了List中除iterator()和size()之外的函数。
AbstractSet的主要作用:它实现了Set接口中的大部分函数。从而方便其它类实现Set接口。

7、Iterator简介

Iterator的定义如下:

public interface Iterator<E> {}

  

Iterator是一个接口,它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。
注意:Iterator遍历Collection时,是fail-fast机制的。即,当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。关于fail-fast的详细内容,我们会在后面专门进行说明。

Iterator的API

// Iterator的API
abstract boolean hasNext() //如果迭代具有更多元素,则返回 true
abstract E next() //返回迭代中的下一个元素
abstract void remove() //从底层集合中删除此迭代器返回的最后一个元素

  

8、ListIterator

ListIterator的定义如下:

public interface ListIterator<E> extends Iterator<E> {}

  

ListIterator是一个继承于Iterator的接口,它是队列迭代器。专门用于便利List,能提供向前/向后遍历。相比于Iterator,它新增了添加、是否存在上一个元素、获取上一个元素等等API接口。

// ListIterator的API
// 继承于Iterator的接口
abstract boolean hasNext()
abstract E next()
abstract void remove()
// 新增API接口
abstract void add(E object)
abstract boolean hasPrevious()
abstract int nextIndex()
abstract E previous()
abstract int previousIndex()
abstract void set(E object)

参考博客:https://www.cnblogs.com/skywang12345/p/3308513.html

Java——集合系列(1)框架概述的更多相关文章

  1. Java 集合系列0、概述

    概述: Collection 框架中 从最上层的核心主干可以看到:Iterator.Collection.Map 三个接口(拓展思考1)1.Collection 接口:主要包括了集合中的一些常用操作, ...

  2. Java 集合系列 17 TreeSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  3. Java 集合系列 16 HashSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  4. Java 集合系列 15 Map总结

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  5. Java 集合系列 14 hashCode

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  6. Java 集合系列 13 WeakHashMap

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  7. Java 集合系列之一:JCF集合框架概述

    容器,就是可以容纳其他Java对象的对象.Java Collections Framework(JCF)为Java开发者提供了通用的容器 java集合主要划分为四个部分: Collection(Lis ...

  8. Java 集合系列 01 总体框架

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)

    概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...

  10. Java 集合系列目录(Category)

    下面是最近总结的Java集合(JDK1.6.0_45)相关文章的目录. 01. Java 集合系列01之 总体框架 02. Java 集合系列02之 Collection架构 03. Java 集合系 ...

随机推荐

  1. python3(十六) sorted

    # sorted()函数list进行排序: L = sorted([36, 5, -12, 9, -21]) print(L) # [-21, -12, 5, 9, 36] # 可以看到默认是按照升序 ...

  2. jetCache 基本使用

    1.pom引用 <!--jetcache缓存 lettuce--> <dependency> <groupId>com.alicp.jetcache</gro ...

  3. http的长连接和websocket的区别

    一.什么是http协议 HTTP是一个应用层协议,无状态的,端口号为80.主要的版本有1.0/1.1/2.0.   HTTP/1.* 一次请求-响应,建立一个连接,用完关闭: HTTP/1.1 串行化 ...

  4. Markdown 语法自用

    Markdown 语法自用 1. 标题 用#来标记 hi hihi hihihi hihihiih hihihihihi hihihihihihi 2. 段落格式 2.1 字体 ​ 斜体:文字两端加上 ...

  5. break与continue用法注意事项

    break 中断循环执行,跳出循环 注意,break只能中断自己所在的循环,一般用在内层循环,但是不能中断外层循环中的代码. continue 跳到循环的下一轮继续执行,结束自己所在循环体代码,继续自 ...

  6. Linux终端命令格式

    01.终端命令格式 command [-options] [parameter] 说明: command:命令名,响应功能的英文单词或单词的缩写 [-options]:选项,可用来对命令进行控制,也可 ...

  7. Eight HDU - 1043 (双向BFS)

    记得上人工智能课的时候老师讲过一个A*算法,计算估价函数(f[n]=h[n]+g[n])什么的,感觉不是很好理解,百度上好多都是用逆向BFS写的,我理解的逆向BFS应该是从终点状态出发,然后把每一种状 ...

  8. 判断一个字符串是否是合法IP地址

    # -*- coding: utf-8 -*- """ @File:test06_判断ip地址是否合法.py @E-mail:364942727@qq.com @Time ...

  9. Joomla 3.4.6 Remote Code Execution漏洞复现

    0x00:简介 Joomla是一套全球有名的CMS系统. Joomla基于PHP语言加上MySQL数据库所开发出来的WEB软件系统,目前最新版本是3.9.12. Joomla可以在多种不同的平台上部署 ...

  10. MVC-路由解析

    MVC程序入口 Global.asax.cs 执行Application_Start 方法 *默认路由 *静态路由,访问链接只需要域名加路由url固定值就行了 *替换控制器,或方法名, *正则路由 方 ...