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

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. HDU.5692 Snacks ( DFS序 线段树维护最大值 )

    HDU.5692 Snacks ( DFS序 线段树维护最大值 ) 题意分析 给出一颗树,节点标号为0-n,每个节点有一定权值,并且规定0号为根节点.有两种操作:操作一为询问,给出一个节点x,求从0号 ...

  2. java多线程 -- volatile 关键字 内存 可见性

    内存可见性(Memory Visibility) 1 内存可见性(Memory Visibility)是指当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其 ...

  3. Android Studio 换主题(Material Theme..)

    1.去如下网址下载自己喜欢的主题文件xx.jar http://color-themes.com/?view=index 2. 导入方式 下载主题—xxx.jar 注意:如果我们下载下来的jar名字如 ...

  4. eclipse 安装 activiti-designer-5.18.0,亲测成功

    转: eclipse 安装 activiti-designer-5.18.0,亲测成功 2018年06月02日 15:50:05 ldw4033 阅读数:2826   版权声明:本文为博主原创文章,未 ...

  5. 使用 python 将 "\r\n" 转换为 "\n"

    众所周知, Linux 下没有 "\r\n", 而 windows 下文本工具默认打开文件时使用 t 模式, 使得写入一行结尾的换行符为 "\r\n", 这样造 ...

  6. Centos6.6下安装nginx1.6.3

    安装环境: [root@nginx ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@nginx ~]# uname -r 2. ...

  7. kubernetes node管理

    目录 Node的扩缩容 删除node节点 Node的隔离与恢复 通过配置文件实现 通过命令行的方式实现 恢复 更新资源对象的label 给一个node添加一个label 将pod调度到指定的node ...

  8. python数据结构(1)

    四种内建的数据结构:List.Tuple.Dictionary以及Set. 1.列表 列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能. (1).创 ...

  9. 豆瓣电影api

    1.获取正在热映的电影: 接口:https://api.douban.com/v2/movie/in_theaters   访问参数: start : 数据的开始项 count:单页条数 city:城 ...

  10. Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别

    简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565 ...