Java集合--概述

摘要

​ 本文主要介绍集合的整体概念,并作为接下来Java集合实现类讲解的索引。

图示

​ 这是在网上看到了这样一张图,感觉很清晰,内容也很全面,我决定按这张图,把自己熟悉的集合都仔细研究一下。

查看大图

各位置描述

位置 描述
左上灰色部分 已经过期,以后的开发中不要使用。
右上浅粉色部分 接口关系图
中间绿色部分 java.util包里集合具体实现类
右下灰色部分 java.util.concurrent包里面的类,用来处理java并发问题

集合分类

分类 描述
Map 双链集合,允许通过键来找到值
List 按照插入顺序保存元素
Set 不允许有重复元素
Queue 从一端插入元素,从另一端获取

实现类

接口 实现类
List ArrayList、LinkedList
Set HashSet、LinkedHashSet、TreeSet
Queue PriorityQueue、LinkedList
Map HashMap、LinkedHashMap、TreeMap、WeakHashMap、IdentityHashMap

底层数据结构

底层数据结构 实现类
数组 EnumMap、ArrayList、ArrayQueue
链表 LinkedHashSet、LinkedList、LinkedHashMap
红黑树 TreeMap、TreeSet
二叉堆 PriorityQueue
哈希表 HashMap、HashSet、LinkedHashMap、LinkedHashSet、WeakHashMap、IdentityHashMap

正文

一、集合的由来

​ 如果一个程序只包含固定数量且生命周期都是已知的对象,那么这是一个非常简单的程序

​ 为了满足常规的编程需要,我们要求能在任何时候,任何地点创建任意数量,甚至是不同类型的对象,由于数组只能装统一类型数据,而且长度固定,于是产生了集合。

二、集合特点
  • 集合只能存放对象。基本数据类型会自动装箱为包装类。
  • 集合存放的是对象的引用,对象本身还是放在堆内存中。
  • 集合可以存放不同类型,不限数量的数据类型。
三、迭代器

​ 使用集合必须对具体实现类进行操作,但是考虑如下状况:如果原本是对List进行编程,现在要把相同的代码用在Set上,如果能不关心容器类型只关心对集合得操作该怎么办?于是,迭代器因此产生。

​ 迭代器是一个对象,它的工作就是遍历并选择序列中的对象,而且客户端不需要关注序列的底层结构,Java中Iterator只能单向移动,但是其子接口ListIterator可以双向移动。

​ Iterator中有hashNext(),next(),remove()几个方法,ListIterator在它的基础上又添加了三种方法,分别是 add(),previous(),hasPrevious()

​ Collection顶层结构接口是Iterable,而Map的顶层接口是Map,Collection下的集合都可以用迭代器遍历,Map可以使用Set<Map.Entry<K, V>> entrySet()方法转换为Set进行迭代遍历。

​ Iterable中包含Iterator<T> iterator()方法,Collection下集合使用该方法后会返回迭代器,可对迭代器进行迭代遍历。

​ 通常来讲有序的集合中有Iterator<T> iterator()ListIterator<E> listIterator()方法,可以进行双向遍历,无序的集合中有Iterator<T> iterator(),只能向后遍历。

四、实现自己的集合

​ 如果想实现自己的集合可以JDK提供的抽象类,如AbstractList,AbstractMap,通常这些抽象类已经为我们提供了现成的实现,可以根据需要对特定的抽象方法重写,直接实现List、Map这样的接口是需要实现所有方法工作量过大。

​ 不过通常来讲,java已经提供提供了丰富的集合实现,很少会需要我们自己去实现集合。


本文参考:

  1. Think in Java 第四版 第8章 集合部分
  2. Java 集合详解
  3. 一张图让你看清Java集合类(Java集合类的总结)

Java集合--概述的更多相关文章

  1. 《java集合概述》

    JAVA集合概述: Collection: |---List有序的:通过索引就可以精确的操作集合中的元素.元素是可以重复的. List提供了增删改查的动作. 增加add(element) add(in ...

  2. Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)

    Java集合概述.Set集合(HashSet类.LinkedHashSet类.TreeSet类.EnumSet类) 1.Java集合概述1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指 ...

  3. Java笔记:Java集合概述和Set集合

    本文主要是Java集合的概述和Set集合 1.Java集合概述 1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组 ...

  4. 第8章-Java集合 --- 概述

    第8章-Java集合 --- 概述 (1)Java集合类是一种特别有用的工具类,可以用于存储数量不等的多个对象,并可以实现常用的数据结构,如 栈.队列等. (2)Java集合大致可分为Set.List ...

  5. Java集合----概述、Collection接口、Iterator接口

    Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中. Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组 Java 集合可分为 Set.Li ...

  6. Java集合——概述

    Java集合——概述 摘要:本文主要介绍了几种集合类型以及有关的一些知识点. 集合类图 类图 类图说明 所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collecti ...

  7. Java集合概述(上)

    Java集合概述(上) 前言 先说说,为什么要写这么一篇博客(我总是喜欢写原因).因为最近到年底了,正好又要准备面试,所以在做各方面的技术总结.而Java集合是Java非常重要的一部分,自己前前后后也 ...

  8. 1.Java集合总结系列:Java集合概述

    一.概述 集合是 Java 中非常重要的 API,在实际应用中非常广泛,在许多面试中也是必考的知识点. Java 所有集合类都位于 java.util 包下,Java 的集合只能保存对象,而无法保存保 ...

  9. Java集合(一):Java集合概述

    注:本文基于JDK 1.7 1 概述 Java提供了一个丰富的集合框架,这个集合框架包括了很多接口.虚拟类和实现类. 这些接口和类提供了丰富的功能.可以满足主要的聚合需求. 下图就是这个框架的总体结构 ...

随机推荐

  1. python stdout 重定向

    import sys class Buffer(object): def __init__(self): self.buffer = [] def write(self, *args, **kwarg ...

  2. [微信小程序]——bug记录

    记录日常开发小程序遇到的一些小问题: input 输入框(unfixed) 描述:输入框focus的时候,placeholder会往上面跳动一下 当 scroll-view 遇上 fixed 描述:给 ...

  3. javascript 模块依赖管理的本质

    模块模式定义 模块是'javascript'的一种设计模式,它为函数定义一个包装函数,并且该包装函数的返回值与模块的API保持一致: function createModule() { functio ...

  4. ReentrantReadWriteLock源码分析(一)

    此处源码分析,主要是基于读锁,非公平机制,JDK1.8. 问题: 1.ReentrantReadWriteLock是如何创建读锁与写锁? 2.读锁与写锁的区别是什么? 3.锁的重入次数与获取锁的线程数 ...

  5. Sip协议

    会话初始协议.SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的(请求应答的通讯模式).微信采用了自主研发的SYNC协议,他通过“握 ...

  6. Netty核心概念(5)之Channel

    1.前言 上一节讲了Netty的第一个关键启动类,启动类所做的一些操作,和服务端的channel固定的handler执行过程,谈到了不管是connect还是bind方法最终都是调用了channel的相 ...

  7. sql_auoload_regiester() 解释(转载)

    在了解这个函数之前先来看另一个函数:__autoload. 一.__autoload 这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数.看下面例子: 运行index.P ...

  8. Office Visio 201*安装详细步骤并激活

    不多说直接上干货! 初步了解:  Visio的百度百科:http://baike.baidu.com/link?url=tNv_gqhhVKcurpP8kvh4ylkknc5JQLIm6bGmQVxi ...

  9. 你误解了Windows的文件后缀名吗?

    一.背景说明 有很多的小伙伴对windows下的文件后缀名不能很好地理解作用和区别,更不用说高深的使用了,在这里给大家说一下这些文件后缀名到底有什么区别,有什么作用呢? 二.说明 简单的说来,wind ...

  10. 解决LNMP环境下WordPress后台缺少”WP-ADMIN”路径

    LNMP一键安装包也是老左比较喜欢使用的环境之一,昨天帮助一个网友搭建LNMP环境后发现登陆WP后台之后点击左侧的菜单发现直接跳转404错误,开始还以为数据库问题,视线朝上一看原来在地址栏中的路径缺少 ...