博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java集合--概述
阅读量:5223 次
发布时间:2019-06-14

本文共 1717 字,大约阅读时间需要 5 分钟。

目录

Java集合--概述

摘要

​ 本文主要介绍集合的整体概念,并作为接下来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已经提供提供了丰富的集合实现,很少会需要我们自己去实现集合。


本文参考:

转载于:https://www.cnblogs.com/cdream-zs/p/9961416.html

你可能感兴趣的文章
VS2015安装开发ios android
查看>>
网站构建
查看>>
[翻译] FastReport "Text" 对象中使用表达式
查看>>
redis哨兵集群、docker入门
查看>>
laravel学习笔记(三)视图渲染
查看>>
rmdir
查看>>
SGU 219 Synchrograph tarjian找环,理解题意,图论 难度:3
查看>>
[翻译][架构设计]The Clean Architecture
查看>>
状态压缩DP
查看>>
Shell从入门到精通进阶之四:流程控制
查看>>
腾讯QQ、新浪微博等知名社交网络图标素材
查看>>
Django中用 form 实现登录注册
查看>>
关于__int64的使用!
查看>>
msil指令 收藏
查看>>
JS08(封装可视区域大小的函数、修改窗口改变页面颜色、冒泡的问题、弹出窗口点击空白处隐藏 、选定文字弹出层、动画基本原理、匀速动画封装函数、无限广告轮播图)...
查看>>
理解session
查看>>
正则表达式2
查看>>
Unity3D_(插件)小地图自刷新制作Minimap小地图
查看>>
为什么分布式一定要有Redis?
查看>>
hihoCoder 1233 : Boxes(盒子)
查看>>