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

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. 哲学家问题(java)的三个解法

    //加synchronize进行同步 //释放资源又很快获得自身的资源,这样不妥,吃完的话休息100ms //每个人先申请编号小的筷子 public class Philosopher impleme ...

  2. zookeeper的安装及共享锁的应用

         Zookeeper的安装及共享锁的应用 1.zookeeper的安装 1.1  下载安装包 Wget http://mirror.bit.edu.cn/apache/zookeeper/zo ...

  3. LINUX的文件按时间排序

    转载 2014年12月29日 00:49:23 20298 > ls -alt # 按修改时间排序 > ls --sort=time -la # 等价于> ls -alt > ...

  4. 利用RAP搭建可视化接口管理平台

    环境:CentOS7 jdk:1.7.0_51 redis:3.2.8 mysql:5.6 tomcat:8.0 安装过程: 依赖组件安装: 安装jdk.redis.mysql.tomcat过程省略. ...

  5. 用rem做响应式开发

    设置对应的响应式的html rem比例 rem就是根元素(即:html)的字体大小.html中的所有标签样式凡是涉及到尺寸的(如: height,width,padding,margin,font-s ...

  6. Mockserver -MOCO的使用

    转自: http://blog.csdn.net/shensky711/article/details/52770686

  7. soj1767.传纸条

    这道题目想了一会儿觉得不知道如何下手,上网看了下资料,原来这道是一道非常经典的题目. 设 f [ k ][ i ][ j ] 表示第 k 步,第 1 条路径走到第 i 行,第 2 条路径走到第 j 行 ...

  8. 早该知道的7个JavaScript技巧

    我写JavaScript代码已经很久了,都记不起是什么年代开始的了.对于JavaScript这种语言近几年所取得的成就,我感到非常的兴奋:我很幸运也是这些成就的获益者.我写了不少的文章,章节,还有一本 ...

  9. 【BZOJ】3786: 星系探索

    [题意]给定一棵带点权树,三种操作: 1.询问点x到根的路径和 2.子树x内的点权加定值y 3.将点x的父亲更换为y,保证仍是树. [算法]平衡树(fhq-treap) [题解] 将树的dfs序作为序 ...

  10. Collections -- 集合的工具类

    Collections是JDK针对集合提供的一个工具类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. 1.搜索 如可以使用Collections提供的二分查找方法binarySe ...