栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

03-02:时间复杂度,ArrayList,HashMap,TreeMap简单介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

03-02:时间复杂度,ArrayList,HashMap,TreeMap简单介绍

时间复杂度

时间复杂度 是程序做了多少常数时间操作的指标。

估算时间复杂度,要用最差情况去估计时间复杂度。

动态数组
  1. 什么是 动态数组?—> ArrayList
  2. 动态数组的扩容和使用。
    查询 —> 寻址 O(1)
    扩容行为会影响ArrayList行为吗?扩容行为从时间复杂度的角度来说,对ArrayList整体性能,没有影响。
    ArrayList动态数组扩容时间复杂度为 O(1);
    ArrayList比固定数组,多常数级别的操作,但是在时间复杂度上,没有影响。也就是说,由于扩容行为所以会比固定数组慢一点,但这种慢,只是常数时间的慢。
    所以说动态数组虽然有扩容,但是整体性能在时间复杂度的影像上,没有。做到与固定数组一样的好,还能扩容。
    只是常数时间的差,但是不影响时间复杂度。
    所以,可以放心使用JAVA中的ArrayList,因为从时间复杂度上来说,他就跟固定数组一样。工程大量使用ArrayList.
哈希表 HashMap

哈希表增删改查时间复杂度全部为 O(1);但是要注意,这个常数时间,是一个比较大的常数时间。

在不重写内部方法的情况下,裸着用,有两种传递方式(使用map.containsKey()检验):

  1. 内部按值传递的数据
    哈希表内部,不管地址,只要你查的是一个东西,我就告诉你。
    原生类型,按值传递。地址不同没关系,只要属性相同。
  2. 内部按引用传递的数据
    非基础类型,非原生类型,内部按引用传递。必须是相同对象or相同对象地址。

不同传递方式,使得一条记录在哈希表中 所占空间是不同的。按值传递,是值所占用的全部字节。而引用传递,(比如两个Node),一条记录只占两个地址所占的字节数 8+8=16B。

PS: Java地址 8 字节?

map.put 既是 新增 操作,也是更新 V 的操作

有序表 TreeMap

内部会按照key排好序。提供功能诸如,firstKey(),lastKey(),floorKey(),ceilingKey()

但是,与哈希表最大的区别,基本所有的方法,时间复杂度为 O(logn) 级别 .

非原生引用,不能直接用。要重写方法。因为TreeMap要求key一定是要比较的。可以使用外部比较器。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号