001-jdk-数据结构-总览
一、集合类简介
1.1、背景
数组是很常用的一种的数据结构,用它可以满足很多的功能,但是,有时会遇到如下这样的问题:
1、需要该容器的长度是不确定的。
2、需要它能自动排序。
3、需要存储以键值对方式存在的数据。
如果遇到上述的情况,数组是很难满足需求的,另一种与数组类似的数据结构——集合类,集合类在Java中有很重要的意义,保存临时数据,管理对象,泛型,Web框架等,很多都大量用到了集合类。
1.2、常见的集合类有
实现Collection接口的:Set、List以及他们的实现类。
实现Map接口的:HashMap及其实现类,
我们常用的有Map及其实现类HashMap,HashTable,List、Set及其实现类ArrayList、HashSet


下面的表格也许可以更直接的表现出他们之间的区别和联系:【常用的】
| 父接口 | 接口 | 描述 | 实现 | 操作特性 | 成员要求 |
|
Iterable← Collection |
Set |
成员不能重复 单值元素 |
HashSet | 外部无序地遍历成员 |
成员可为任意Object子类的对象,但如果覆盖了equals方法, 同时注意修改hashCode方法。 |
| TreeSet |
外部有序地遍历成员;附加实现了SortedSet, 支持子集等要求顺序的操作 |
要求实现caparable接口,或者使用 Comparator构造TreeSet。 成员一般为同一类型。 |
|||
| LinkedHashSet | 外部按成员的插入顺序遍历成员 | 成员与HashSet成员类似 | |||
| List |
提供基于索引的对成员的随机访问 单值元素 |
ArrayList | 提供快速的基于索引的成员访问,对尾部成员的增加和删除支持较好 | 成员可为任意Object子类的对象 | |
| LinkedList |
对列表中任何位置的成员的增加和删除支持较好, 但对基于索引的成员访问支持性能较差 |
成员可为任意Object子类的对象 | |||
| Map |
保存键值对成员,基于键找值操作, compareTo或compare方法对键排序 |
HashMap | 能满足用户对Map的通用需求 |
键成员可为任意Object子类的对象,但如果覆盖了equals方法, 同时注意修改hashCode方法。 |
|
| TreeMap |
支持对键有序地遍历,使用时建议先用HashMap增加和删除成员, 最后从HashMap生成TreeMap;附加实现了SortedMap接口, 支持子Map等要求顺序的操作 |
键成员要求实现caparable接口,或者使用Comparator构造TreeMap。 键成员一般为同一类型。 |
|||
| LinkedHashMap | 保留键的插入顺序,用equals 方法检查键和值的相等性 |
成员可为任意Object子类的对象,但如果覆盖了equals方法, 同时注意修改hashCode方法。 |
|||
| IdentityHashMap | 使用== 来检查键和值的相等性。 | 成员使用的是严格相等 | |||
| WeakHashMap | 其行为依赖于垃圾回收线程,没有绝对理由则少用 |
实现Collection接口的类,如Set和List,他们都是单值元素(其实Set内部也是采用的是Map来实现的,只是键值一样,从表面理解,就是单值),不像实现Map接口的类一样,里面存放的是key-value(键值对)形式的数据。这方面就造成他们很多的不同点,如遍历方式,前者只能采用迭代或者循环来取出值,但是后者可以使用键来获得值得值。
1.3、集合类 & 容器
1.3.1、为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就要对对象进行存储,集合就是存储对象最常用的一种方式。
1.3.2、数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储任意数据类型,集合只能存储对象。
数组只能装同一种数据类型的数据;长度不能能动态改变;
1.3.3、集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
001-jdk-数据结构-总览的更多相关文章
- Python3 From Zero——{最初的意识:001~数据结构和算法}
一.从队列两端高效插入.删除元素,及保留固定数量的数据条目: collections.deque([iterable[,maxlen=N]]) a = collections.deque([1, 2] ...
- jdk包结构及用途分析
Table of Contents 概述 jdk包总览 rt.jar包结构分析 概述 jdk是每一个使用java的人员每一天都在使用的东西,博主也已经研究了jdk源代码中的一些类了,本篇博客是想从jd ...
- Redis 面试题 - 收藏版 (持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- Terrocotta - 基于JVM的Java应用集群解决方案
前言 越来越多的企业关键应用都必须采用集群技术,实现负载均衡(Load Balancing).容错(Fault Tolerance)和灾难恢复(Failover).以达到系统可用性(High Avai ...
- redis 的过期策略都有哪些?内存淘汰机制都有哪些?
面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 r ...
- java数据结构分析
java数据结构分析 此文章内容参考于:http://www.cnblogs.com/ysocean/ 一.数据结构总览图 1.数组 2.链表 3.栈 4.队列 5.二叉树 6.堆 7.散列 8.红黑 ...
- redis面试必问
1.项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 面试题剖析 为什么要用缓存? 用缓存,主要有两个用途:高性能.高并发. 高性能 假设这么个场景,你有个操作,一个请求过来,吭哧 ...
- 搞定redis面试--Redis的过期策略?手写一个LRU?
1 面试题 Redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现? 2 考点分析 1)我往redis里写的数据怎么没了? 我们生产环境的redis怎么经常会丢掉一些数据?写进去了 ...
- 4.redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?
作者:中华石杉 面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当 ...
- 面试系列14 redis的过期策略都有哪些
(1)设置过期时间 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时?10分钟?这个很有用,我们自己可以指定缓存到期就失效. 如果假设你 ...
随机推荐
- js判断img是否存在
利用image对象的onerror事件来判断,出错则更换image对象的src为默认图片的URL. <p>第一种情况:图片存在,正常显示 <img src="http ...
- 07_Azkaban工作流调度器简介及其安装
Azkaban介绍 Azkaban是一个Linkedin开源的一个批量工作流任务调度器.用于在一个工作流内以一个特定的顺序运行一组工作和流程. Azkaban定义了一种KV文件格式来建立任务之间的依赖 ...
- PaaS容器集群优化之路
1. 性能优化面对的挑战 以下是整个PaaS平台的架构 其中主要包括这些子系统: 微服务治理框架:为应用提供自动注册.发现.治理.隔离.调用分析等一系列分布式/微服务治理能力,屏蔽分布式系统的复杂度. ...
- web后端开发语言Java和PHP的比较
理念上的不同导致了Java和PHP在Web应用开发上显示了不同的结果,尽管Java的数学计算和数据库访问都有优势,架构也相当完美,但是PHP却可以简单轻松地支持高强度Web访问,能够快速开发应用,支持 ...
- Python 13--数据库
- focusout([data],fn) 当元素失去焦点时触发 focusout 事件。
focusout([data],fn) 概述 当元素失去焦点时触发 focusout 事件. focusout事件跟blur事件区别在于,他可以在父元素上检测子元素失去焦点的情况.大理石平台怎么样 参 ...
- python 使用流式游标 读取mysql怎么不会内存溢出
使用过java读取mysql大数据量的人应该都知道,如果查询时不开游标不设置一次性区大小的话,会一次性的把所有记录都拉取过来再进行后续操作,数据量一大就很容易出现OOM 如果用python去读取mys ...
- ckeditor实现ctrl+v粘贴word图片并上传
官网地址http://ueditor.baidu.com Git 地址 https://github.com/fex-team/ueditor 参考博客地址 http://blog.ncmem.com ...
- stark项目流程
1 创建Django项目 2 创建app python manage.py startapp app名 3 文件配置 app配置 静态文件配置 创建文件夹,下载bootstrap,jquery 归档文 ...
- 为什么我在mysql的my.cnf下找不到bind-address
在/etc/mysql/mysql.conf.d目录下的mysqld.cnf文件