java 集合:实现
集合本来就是为了方便开发的,实现了一些基本数据结构,一般来说数据结构有两种物理的实现:数组和链表。数组是连续的空间,链表是不连续的。基于这两种又扩展了很多的数据结构。队列,栈,hash表,树。
在java中有两种,一种是collection,主要是为了存储对象集合。一种是map,主要存储键值对。要了解各种java集合怎么使用就必须了解底层的数据结构。
collection是一个总的接口,有子接口set和list。然后还有一些抽象类,实际上这些所有的接口和抽象类,只不过定义了一些行为而已,真正的数据结构定义都是在每一个实现类中。
list:主要的实现类有arraylist,正如名字一样底层就是数组。linkedlist,底层是链表。这个两个类的特性也和这两种数据结构是一样的。
set:虽然是在collection中,hashset底层确是hashmap。为什么?首先说一下set是为了存储不一样的数据。hashmap实现了这个存储,hashset只是关注了hashmap中的key,value是一个默认的object对象。
tip:在了解hashset的时候一定要明白什么是hash表以及hash算法。hash其实就是一种映射方式,把很多无关的数据按照一定的函数映射之后,映射在固定的空间之中。为什么是固定空间?因为hash表在容量在不满的时候会有一个性能最佳的时刻,假如hash表很满了,性能就会下降。反而体现不出hash表的性能优越了。所以你要在创建之前最好可以预知空间的大小。这样hash表才会保持一个优良的性能。hash表为什么性能好?由于hash表基于数组,所以会有寻址上的优势,而hash算法是提供hash表一个快速定位的方法。基于这两个特点,hash表可以高效的查找和删除添加操作,但是有一个缺点就是容量,假如容量满了就会导致性能下降,而解决性能问题,只有重新构建hsah表。
hash表性能分析:首先要了解hash表的性能瓶颈是在什么地方,主要就是hash算法可能会出现hash冲突,这个主要就是要映射的集合是很大的,映射到固定的集合中的时候必定会有重复值的情况。解决这个有很多方法,java中采用的是链地址法,就是把一个冲突的值加到数组值的所连接的链表中去。这个方法在特殊情况下(所有值都单一映射)会出现退化,退化为一个链表。这样hash表的特性就体现不出来了,还有就是当hash表很满的时候,所使用的查找和添加元素的时间就会加剧,这样就导致hash表性能下降。这也就是性能瓶颈。即使使用其他的再哈希方法解决冲突,也会导致性能下降。所以一定要防止元素满表,这样就必须在添加元素的时候检查,假如容量超值了就要重新的去构建hash表。
map:了解了hash表之后,也基本上就了解了hashmap的实现,hashmap中有2个指标,一个是容量,一个是加载因子,其实就是hash表的容量比。也就是一个hash表一般都会超出容量。在使用hash表的时候也最好是使用容量的构造。更好的构建你的元素集合。
所以说hashset和hashmap都是同一底层数据结构,其实原理还是一样的。另一个就是treeset和treemap。这个和上一组是一样的原理,就是使用的底层集合是使用的红黑树。红黑树,是一个自平衡的查找二叉树,查找二叉树就是说所有的元素都是有规律的,这就要求你存储的元素要么是继承comparable或者实现compator的比较器。查找二叉树是数结构,树的使用就是为了大量的数据的时候依旧可以保持快速的查找,但是假如你的数据很特殊,树也会退化为一个链表,这样就会导致效率下降。解决的方法就是红黑树,这个是会不断的进行一个平衡,使得树的效率不会下降。这个主要就是针对大量数据的。才会体现出他的性能优越。
java 集合:实现的更多相关文章
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- java集合你了解多少?
用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...
- 深入java集合学习1-集合框架浅析
前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- Java 集合框架
Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...
- Java集合概述
容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...
- 深入java集合系列文章
搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...
随机推荐
- CentOS_7.2安装PHP_5.6
一.安装依赖包和开发工具: yum install vim vim-enhanced wget zip unzip telnet ntsysv compat* apr* nasm* gcc gcc* ...
- .NET小细节
1.equals()和运算符==的区别 C#中有两种不同的相等:引用相等和值相等.值相等是两个对象包含相同的值:引用相等是两个对象引用的是同一个对象. “==”操作符比较的是两个变量的值是否相等,或两 ...
- Mysql主数据库+备份数据库部署教程
转:http://www.111cn.net/database/mysql/76450.htm 本文我们来讲讲Mysql主备如何部署,这里说的主是指Mysql主数据库,备是从数据库,备可以是多个,也可 ...
- deepin linux字体渲染(转)
<?xml version='1.0'?> <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> <fontconfig> <ma ...
- DEV控件中GridView中的复选框与CheckBox实现联动的全选功能
最初的界面图如图1-1(全选框ID: cb_checkall DEV控件名称:gcCon ): 要实现的功能如下图(1-2 1-3 1-4)及代码所示: 图1-2 图1-3 图1-4 O(∩_∩ ...
- Linux安装脚本需要交互之如何实现自动安装
Linux中shell脚本运行时经常需要进行交互,比如安装软件的过程中对license声明的确认,需要输入yes,回车之类的确认信息.这个在自动化安装的时候就会是个问题. 通常对于这个问题比较灵活的解 ...
- 如何更方便地调试javascript代码
开发者工具 现在一般的浏览器都内置了开发者工具,快捷键F12可以打开,如Chrome浏览器下,Sources面板下找到对应的js文件 这是首选方法,但是对于SPA程序(比如easyui),可能找不到内 ...
- vs安装后当切换到图形设计界面的时候自动弹出“正在准备安装的提升”,然后程序处于假死状态
Vs2008 安装后当切换到图形设计界面的时候自动弹出 ”正在准备安装的提示“,然后程序处于假死状态 在网上找了很多,最终解决问题: 从vs2008安装光盘中找到 /WCU/WebDesignerC ...
- oracle 存储过程小总结
1 创造存储过程 Create or procedure My_procedure( param1,param2) is Begin . . . End 2 判断语句 If x>0 then B ...
- django学习
1.进入目录→创建一个新的项目mysite 命令:E:\MyCode\PythonCode>django-admin startproject mysite 自动生成目录: 2.创建一个APP ...