Java集合(一): 集合框架Collection和Map

目录

  • 集合设计的目标
  • Collection接口
  • Map接口

集合设计的目标

在Java2之前,Java就提供了特设类。比如Dictionary,Vector,Stack,和Properties这些类用来存储和操作对象数组。
虽然这些类也很有用,但是它们缺少一个核心的主题。由于这个原因,使用Vector和Properties的操作方式有着很大的不同。
集合框架设计出来的目标是:

  • 框架必须是高性能的,基本集合(动态数组,链表,树,哈希表)的实现必须是高效的。
  • 该框架必须允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
  • 对一个集合的扩展和适应必须是简单的。

就像所有对象都继承自Object类一样,Java的所有集合接口都是继承自Collection接口和Map接口。如下图所示,图片来自Java集合框架

在图中主要有四个部分。

  • 接口。代表了集合的抽象数据类型。之所以定义多个接口是为了以不同的方式操作集合对象。比如Collection,Set,List,Queue,Map等。
  • 抽象类。继承上述接口的抽象类,无法实例化,比如Abstrac tCollection,AbstractList,AbstractMap等。
  • 继承了抽象类的具体类。具体类不是直接实现接口的,而是实现了继承了接口的抽象类。比如ArrayList,LinkedList。
  • 工具类。比如Collections和Arrays。提供对集合对象的排序搜索等方法。注意区别Collections和Collection。

Collection接口

Collection接口继承自Iterable接口。它的方法如下,来自Java8手册。
其中removeIf,stream,spliterator,parallelStream是Java8所有的。

主要看一下iterator()方法,它在Iterable接口中声明。Iterable接口要求必须实现,返回实现Iterator对象的方法。比较拗口。(主要是要区别Iterator接口和Iterable接口)。也就是说,在具体类中需要以内部类的形式,去实现Iterator接口。并且重写其中的方法,分析ArrayList实现Collection接口再研究。
下面是Iterable接口内容。forEach和Spliterator是Java8的内容。

Iterator接口的内容。forEachRemaining是Java8的内容。

List接口

List代表一个元素有序,可重复的集合。由于List是有序集合因此增加了一些根据索引来操作集合元素的方法。
其中Java8中的方法有repalceAll,sort,和spliterator。

Queue接口

设计用于在处理之前容纳元素的集合。除了基本的“收集”操作外,队列还提供其他插入,提取和检查操作。这些方法中的每一种都以两种形式存在:一种在操作失败时引发异常,另一种返回特殊值(取决于操作,为null或false)。插入操作的后一种形式是专为与容量受限的Queue实现一起使用而设计的;在大多数实现中,插入操作不会失败。

Queue中有很多重复的方法。总结如下。
add/offer,element/peek,remove/poll中的三个方法均为重复的方法,在选择使用时不免有所疑惑。
1、add()和offer()区别:
add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false。因此就可以在程序中进行有效的判断!
2、poll()和remove()区别:
remove() 和 poll() 方法都是从队列中删除第一个元素。如果队列元素为空,调用remove() 的行为与 Collection 接口的版本相似会抛出异常,但是新的 poll() 方法在用空集合调用时只是返回 null。因此新的方法更适合容易出现异常条件的情况。
3、element() 和 peek() 区别:
element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。
下面是Queue的一些常用方法:
add 增加一个元索 如果队列已满,则抛出一个IIIegaIStateEeception异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null

Set接口

模拟了数学中的集的概念。不包含重复的元素,更准确的说是不包含e1,e2,e1.equals(e2),最多只包含一个null值。
Java8新增了spliterator方法。

Map接口

将键映射到值的对象。映射不能包含重复的键;每个键最多可以映射到一个值。该接口代替了Dictionary类,后者是一个完全抽象的类,而不是一个接口。
Map界面提供了三个集合视图,这些视图允许将地图的内容视为一组键,一组值或一组键-值映射。映射的顺序定义为映射的集合视图上的迭代器返回其元素的顺序。
一些映射实现(例如TreeMap类)对其顺序做出特定的保证。其他的(例如HashMap类)则没有。

原文地址:https://www.cnblogs.com/zuotongbin/p/11826767.html

时间: 2024-11-07 16:22:19

Java集合(一): 集合框架Collection和Map的相关文章

Java集合类根接口:Collection 和 Map

前言 在前文中我们了解了几种常见的数据结构,这些数据结构有着各自的应用场景,并且被广泛的应用于编程语言中,其中,Java中的集合类就是基于这些数据结构为基础. Java的集合类是一些非常实用的工具类,主要用于存储和装载数据 (包括对象),因此,Java的集合类也被成为容器.在Java中,所有的集合类都位于java.util包下,这些集合类主要是基于两个根接口派生而来,它们就是 Collection和 Map. Collection接口 Collection派生出三个子接口,Set代表不可重复的无

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

在Java的util包中有两个所有集合的父接口Collection和Map,它们的父子关系:            java.util        +Collection 这个接口extends自 --java.lang.Iterable接口           +List 接口               -ArrayList 类              -LinkedList 类              -Vector 类     此类是实现同步的 +Queue 接口         

菜鸟日记之 java中的集合框架

java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterator接口所以具有了iterator()方法 ,该方法返回一个Iterator<T>,这个接口具有 HasNext (),next(),remove()3个方法可以在实现类里完成实现. hasNext():判断是否有下一个元素 cusor是当前的操作下标 next():读取下一个元素 remove(

java中的集合与映射

具体集合类型 ArrayList:一种可以动态增长和缩减的索引序列 LinkeList:一种可以在任何位置进行高效插入和删除操作的有序序列 ArrayDeque:一种可以用循环数组实现的双端队列 HashSet:一种没有重复元素的无序集合 TreeSet:一种有序集合 EnumSet:一种包含枚举类型值的集合 LinkedHashSet:一种可以记录元素插入次序的集合 PriorityQueue:一种允许高效删除最小元素的集合 HashMap:一种存储键/值关联的数据结构 TreeMap:一种键

我所理解Java集合框架的部分的使用(Collection和Map)

所谓集合,就是和数组类似--一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接口,长虚线表示抽象类,实线表示类,箭头表示实现接口或者继承)(在网络上找的图,不知道原作者,侵权请联系我删除)(总之,关系很复杂,所以不用记得这个图,只是用来吓吓人而已的). 下面贴上个人理解之精简版之Collection(集)和Map(地图?暂且这么理解吧),话说思维导图蛮好用,以下是两幅思维导图

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

1. Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 注意: 既有接口也有类,图中画实线的是类,画虚线的是接口 使用之前须要到导入java.util包 List和Set是Collection的子接口,ArrayList和LinkedList是List的两个实现类,HashSet和TreeSet是Set的两个实现类 重点:ArrayList.LinkedList和HashSet Map接口对应的集合是以K-V键值对的方式存储数据的,不同于Collection

【转】Java集合框架List,Map,Set等全面介绍

原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +--java.util.LinkedList [C]   +--java.u

Java中的集合框架-Map

前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从本篇开始,对集合框架里的另外一部分Map作一下记录. 一,集合框架的Map接口 Map与Collection不同之处在于它是以键值对来存储数据: Map比较常用的实现类有四个:HashTable,HashMap,LinkedHashMap,TreeMap: Map的方法也可以分为四类,增删改查,大致如下: 新

Java学习笔记32(集合框架六:Map接口)

Map接口与Collection不同: Collection中的集合元素是孤立的,可理解为单身,是一个一个存进去的,称为单列集合 Map中的集合元素是成对存在的,可理解为夫妻,是一对一对存进去的,称为双列集合 Map中存入的是:键值对,键不可以重复,值可以重复 Map接口中的常用集合: 1.HashMap:哈希表的存储结构,但是无法保证存取顺序 2.LinkedHashMap:存储数据采用的是哈希表和链表,可以有顺序 Map接口的常用方法: 示例: package demo; import ja