想了下集合,列表,映射三者关系

set,list,map

ArrayList采用数组方式存储数据,继承List;

LinkedList采用链表方式存储数据,继承List;

所以数组方式都有下表,以及每个下表都对应value,所以里面的元素可以重复,每次增加删除元素,插入位置后面的元素都要变动(下表id,以及value都要变动),所以增删会很慢, 查询起来会很快,相当于有索引;

链表方式采用指针,除了几个特殊的节点外,几乎每个节点,都有前序节点,后续节点,所以里面元素也是可以重复的, 增加删除会很快,只有移动一两个指针就可以了;

vector,上图掉了这个,采用数组方式存储,也是继承List,和ArrayList的两个不同之处是:1,Vector里的所有方法都是同步的,支持多线程.2,vector每次扩容是数组增加一倍大小,arraylist是增加0.5倍;

(vector开销更大,能用arrayList就不用vector)

list集合中三种实现有利有弊,

数组查询时间复杂度O(1),增删就是O(n);

链表查询时间复杂度O(n),增删就是O(1);

猜想,能否在中间找个平衡点,

于是就有了:二叉搜索树,增删查的时间复杂度都为O(lgn);

下面来看应用...

下面来说Set集合:

可以实例化为HashSet, TreeSet;

set里面存的值不能是重复的 , 所有,首先要明白一点:加入Set里面的元素必须定义equals()方法以确保对象的唯一性。

在往Set中插入新的对象时,首先会用该对象的hashCode()与已经存在对象的hashCode()做比较,如果相等,那就不能插入,如果不等,才会调用equals()方法,如果equals结果为true,说明已经存在,就不能再插入,如果为false,可以插入。 

先说下,两者的区别:

1.HashSet是哈希表实现的,数据是无序的,可以存放且只能存放一个null;

有序是因为HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样;

2.TreeSet是采用红-黑树结构实现的,元素是自动排序的,不能存放null;

有序是因为元素类型必须实现Comparable接口, 并且覆盖其compareTo方法,TreeSet是SortedSet接口的唯一实现类;

下面再钻一下红-黑树,他其实是二叉搜索树的变形(AVL树其实也是二叉搜索树的变形,avl树必须满足两个条件:1.首先是一个二叉搜索树;2.每个节点的左右子树高度差绝对值<=1);

为什么在有了二叉搜索树的前提下,还要创造出avl以及红黑树呢:因为二叉搜索树在有序(升序,降序)插入的时候,时间复杂度会变成O(n),降到最低;但是红-黑树的自我修复功能保证了即使在最坏的情况下,也能保证时间复杂度在O(logN)的级别上。

其实红-黑树和avl树差不多,那为什么现实中avl很少见,都是用的红-黑树:因为avl的增加-删除节点操作复杂度过高;

AVL树最经典的调节平衡(左旋,右旋)在这里就不做说明了,比较简单,实在不懂,可以看下这个https://my.oschina.net/llmm/blog/158454;

红-黑树的实现以及原理,自己看http://www.cnblogs.com/fanzhidongyzby/p/3187912.html   我就不装逼了.

下面再来说Map集合:(下班了,明天继续)

over...

_  __
 (_)/   \
<'_, ____)~~~~~~~   
  ^^   ^^

set,list,map分析的更多相关文章

  1. 调试技巧 —— 如何利用windbg + dump + map分析程序异常

    调试技巧 —— 如何利用windbg + dump + map分析程序异常 逗比汪星人2011-09-04上传   调试技巧 —— 如何利用windbg + dump + map分析程序异常 http ...

  2. JMP软件中的晶圆图( Wafer Map)分析

    关键词:芯片 良率分析 晶圆图 质量管理 JMP Minitab 半导体芯片的生产,简单来讲,是将电路通过各种复杂的物理化学方法制作到晶圆上,在生产的最后阶段会进行不同电性功能的测试以确保产品的功能性 ...

  3. java map 分析

    java 8 对HashMap进行了优化, 当碰撞时使用TreeNode的二分方法查找数据: 但是当数据碰撞厉害的时候, table有很多浪费. table 大小等于size/factor, 当碰撞很 ...

  4. stm32 map文件的分析

    相信有较大项目开发经验的朋友都曾遇到内存溢出的问题,那么大家都是如何分析这类问题的呢?大家遇到HardFault_Handler 有对map分析过吗? 首先讲述一下关于map在MDK-ARM中的配置. ...

  5. 【Android开源项目分析】android轻量级开源缓存框架——ASimpleCache(ACache)源代码分析

    转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46379055 ASimpleCache框架源代码链接 https://github ...

  6. Uboot启动流程分析(二)

    1.前言 在前面的文章Uboot启动流程分析(一)中,链接如下: https://www.cnblogs.com/Cqlismy/p/12000889.html 已经简单地分析了low_level_i ...

  7. ASimpleCache源码分析

    ASimpleCache里只有一个JAVA文件——ACache.java,首先我用思维导图制作了ACache类的详细结构图: 通过分析官方给的demo来驱动源码分析吧 以字符串存储为例(官方给的dem ...

  8. Android--sharepreference总结

    SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数. SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/ ...

  9. 【10-26】java调试技术学习笔记

    调试工具 jdk自带的工具 jmap jconsole VisualVM jmap jmap -histo:live pid 列出该进程的所有活动实例统计信息 jmap -dump:live,file ...

随机推荐

  1. 【纪中集训2019.3.13】fft

    题意: 描述 一共有\(n+m\)道题,其中\(n\)道答案是\(A\),\(m\)道答案是\(B\): 你事先知道\(n和m\),问在最优情况下的期望答错次数,对\(998244353\)取模: 范 ...

  2. R安装时出现辑程包不存在,解决方法

    R > -------------------------------------------------[解决方案]1.使用命令单独安装caret,安装的时间很长.install.packag ...

  3. HDU 3943 数位dp+二分

    K-th Nya Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) ...

  4. [大数据]-Fscrawler导入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1并配置同义词过滤

    fscrawler是ES的一个文件导入插件,只需要简单的配置就可以实现将本地文件系统的文件导入到ES中进行检索,同时支持丰富的文件格式(txt.pdf,html,word...)等等.下面详细介绍下f ...

  5. 转:Block原理及引用循环问题

    2010年WWDC发布iOS4时Apple对Objective-C进行了一次重要的升级:支持Block.说到底这东西就是闭包,其他高级语音例如Java和C++已有支持,第一次使用Block感觉满简单好 ...

  6. Broker流量均衡 prefer reassign

    0.均衡流量的步骤 现在的kafka集群,只要遇到过weibo_common_act2 topic的节点在ZK中丢失,就要prefer一次流量,否则不均匀. 总结均衡流量的一般步骤: 通过hpm查询b ...

  7. ConcurrentHashMap 产生NullPointerException

    今天测试在发给我一段报错日志后,根据日志定位到从ConcurrentHashMap 的缓存中get的时候,ConcurrentHashMap的底层抛出了空指针,当时感觉很奇怪为什么在get的时候产生空 ...

  8. Maven项目中通过profile定义使不同环境使用不同配置信息

    profile可以让我们定义一系列的配置信息,然后指定其激活条件.这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果.比如 ...

  9. soj2012.King(有向图+蛋疼得一逼)

    Description There are n children in a country marked by integers from 1 to n. They often fight with ...

  10. java 获得字符串中最大重复子串长度

    参考:http://blog.csdn.net/csdn_yaobo/article/details/50338025 要找一串字符串中,重复的字串长度,.例如ABCX1&ABC,中ABC重复 ...