Java基础系列7——集合系列(1)框架概述
该系列博文会告诉你如何从入门到进阶,一步步地学习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基础系列7——集合系列(1)框架概述的更多相关文章
- Java多线程系列--“JUC集合”01之 框架
概要 之前,在"Java 集合系列目录(Category)"中,讲解了Java集合包中的各个类.接下来,将展开对JUC包中的集合进行学习.在学习之前,先温习一下"Java ...
- 【Java基础】谈谈集合.List
摘自:https://www.cnblogs.com/54chensongxia/p/11722828.html 目录 1. ArrayList 1.1 ArrayList的构造 1.2 add方法 ...
- 我的面试标准:1.能干活;2.Java基础好;3.熟悉分布式框架
本文授权转载自:https://www.cnblogs.com/JavaArchitect/p/10011253.html . awesome-java:https://github.com/Snai ...
- 黑马程序员——JAVA基础之Map集合
------- android培训.java培训.期待与您交流! ---------- Map集合: 该集合存储键值对.一对一对往里存.而且要保证键的唯一性. 和Set很像,其实Set底层就是使用了M ...
- Java 基础 -- 泛型、集合、IO、反射
package com.java.map.test; import java.util.ArrayList; import java.util.Collection; import java.util ...
- 黑马程序员——JAVA基础之List集合
------- android培训.java培训.期待与您交流! ---------- Collection : |--List:元素是有序的,元素可以重复.因为该集合体系有索引. | ...
- Java基础题:集合、String、性能、线程
转载自:Java基础题 https://yq.aliyun.com/articles/601786?utm_content=m_1000001149
- Java基础---泛型、集合框架工具类:collections和Arrays
第一讲 泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...
- Java基础知识:集合框架
*本文是最近学习到的知识的记录以及分享,算不上原创. *参考文献见链接. 目录 集合框架 Collection接口 Map接口 集合的工具类 这篇文章只大致回顾一下Java的总体框架. 集合框架 ht ...
随机推荐
- 01-复杂度2 Maximum Subsequence Sum (25 分)
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to ...
- mysql 升序降序
默认不指定,order by 按照升序排列. asc:升序 desc:降序
- mysql e的n次幂exp()
mysql> ); +-------------------+ | exp() | +-------------------+ | 2.718281828459045 | +---------- ...
- Linux环境下Nexus3.6安装
1. 安装JDK 2. 下载nexus开源版本即可,Nexus OSS下载 流程 3. 解压文件,会的得到两个文件夹[nexus-3.6.0]和[sonatype-work] tar -zxv ...
- Koa 脚手架创建项目
Koa 脚手架创建项目 通过应用 koa 脚手架生成工具 可以快速创建一个基于 koa2 的应用的骨架 全局安装koa npm install koa-generator -g //必须安装到全局 创 ...
- maven依赖总结
1.依赖元素 groupId,必选,实际隶属项目 artifactId,必选,其中的模块 version必选,版本号 type可选,依赖类型,默认jar scope可选,依赖范围,默认compile ...
- 经典批处理实现自动关机(BAT)
经典批处理实现自动关机1.BAT @ECHO offTITLE 自动关机程序 作者:廖晓青 :startCLSCOLOR 1frem 使用COLOR命令对控制台输出颜色进行更改MODE con: CO ...
- 使用PLSQL导入excel数据至oracle数据库
https://blog.csdn.net/qq_42909551/article/details/82108754 https://jingyan.baidu.com/album/14bd256e2 ...
- [转]Maven 国内源配置(2019/2/14)
原文地址:https://segmentfault.com/a/1190000018147680 新年开工后要开始新的项目,但是发现一些项目的依赖没有在阿里仓库Central或Public源之中,项目 ...
- MySQL count
https://www.jianshu.com/p/1b0a1f641e80] 不同引擎count(*)实现方式不同 MyISAM引擎把一个表的总行数记录在了磁盘上,执行count(*)会直接返回这个 ...