java数据结构基础_小灰灰的数据结构-程序员宅基地

技术标签: 面试  iterator  java  list  hashmap  数据结构  object  

Collection 
........|--------List 
........|..........|----------ArrayList 
........|..........|----------Vector 
........|..........|.............|-----Stack 
........|..........|----------LinkedList 
........|--------Set 
...................|----------HashSet. 
...................|.............|-----LinkedHashSet 
...................|----------SortedSet 
.................................|-----TreeSet 
  
Iterator 
.....|-------ListIterator 
  
Map 
.....|------Hashtable 
.....|..........|------Properties 
.....|------HashMap 
.....|..........|------LinkedHashMap 
.....|------WeakHashMap 
.....|------SortedMap 

................|------TreeMap 


Collection. 
●..实现该接口及其子接口的所有类都可应用clone()方法,并是序列化类. 

1......List. 
.....●..可随机访问包含的元素 
.....●..元素是有序的 
.....●..可在任意位置增、删元素 
.....●..不管访问多少次,元素位置不变 
.....●..允许重复元素 
.....●..用Iterator实现单向遍历,也可用ListIterator实现双向遍历 

..........ArrayList 
..........●..用数组作为根本的数据结构来实现List 
..........●..元素顺序存储 
..........●..新增元素改变List大小时,内部会新建一个数组,在将添加元素前将所有数据拷贝到新数组中 
..........●..随机访问很快,删除非头尾元素慢,新增元素慢而且费资源 
..........●..较适用于无频繁增删的情况 
..........●..比数组效率低,如果不是需要可变数组,可考虑使用数组 

..........●..非线程安全 

..........● ArrayList(顺序表)底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组。如增加的元素超过10个,那么底层会生成一个新的数组, 长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组当中。     


..........Vector. 
..........●..另一种ArrayList,具备ArrayList的特性 
..........●..所有方法都是线程安全的(双刃剑,和ArrayList的主要区别) 
..........●..比ArrayList效率低 

...............Stack 
...............●..LIFO的数据结构 

..........LinkedList. 
..........●..链接对象数据结构(类似链表) 
..........●..随机访问很慢,增删 操作很快,不耗费多余资源 

..........●..非线程安全 

..........●..次类实现Queue接口,提供FIFO队列操作


2......Set. 
.....●..不允许重复元素,可以有一个空元素 
.....●..不可随机访问包含的元素 
.....●..只能用Iterator实现单向遍历 

..........HashSet 
..........●..用HashMap作为根本数据结构来实现Set 
..........●..元素是无序的 
..........●..迭代访问元素的顺序和加入的顺序不同 
..........●..多次迭代访问,元素的顺序可能不同 
..........●..非线程安全 

...............LinkedHashSet 
...............●..基于HashMap和链表的Set实现 
...............●..迭代访问元素的顺序和加入的顺序相同 
...............●..多次迭代访问,元素的顺序不便 
...............●..因此可说这是一种有序的数据结构 
...............●..性能比HashSet差 
...............●..非线程安全 

..........SortedSet 
..........●..加入SortedSet的所有元素必须实现Comparable接口 
..........●..元素是有序的 

...............TreeSet. 
...............●..基于TreeMap实现的SortedSet 
...............●..排序后按升序排列元素 
...............●..非线程安全 

----------------------------------- 
  
Iterator.. 
●..对Set、List进行单向遍历的迭代器 

..........ListIterator. 
..........●..对List进行双向遍历的迭代器 

----------------------------------- 

3.Map 
●..键值对,键和值一一对应 
●..不允许重复的键. 

.....Hashtable. 
.....●..用作键的对象必须实现了hashcode()、equals()方法,也就是说只有Object及其子类可用作键 
.....●..键、值都不能是空对象 
.....●..多次访问,映射元素的顺序相同 
.....●..线程安全的 

..........Properties 
..........●..键和值都是字符串 

.....HashMap 
.....●..键和值都可以是空对象 
.....●..不保证映射的顺序 
.....●..多次访问,映射元素的顺序可能不同 
.....●..非线程安全 

...............LinkedHashMap 
...............●..多次访问,映射元素的顺序是相同的 
...............●..性能比HashMap差 

.....WeakHashMap.. 
.....●..当某个键不再正常使用时,垃圾收集器会移除它,即便有映射关系存在 
.....●..非线程安全 

.....SortedMap. 
.....●..键按升序排列 
.....●..所有键都必须实现.Comparable.接口. 

...............TreeMap. 
...............●..基于红黑树的SortedMap实现 

...............●..非线程安全


-------------------------------------------------------------------------------------

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
    这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。  这一点我做了实验。在分别有200000条“记录”的ArrayList和LinkedList的首位插入20000条数据,LinkedList耗时约是ArrayList的20分之1。

 4.查找操作indexOf,lastIndexOf,contains等,两者差不多。

5.随机查找指定节点的操作get,ArrayList速度要快于LinkedList.
这里只是理论上分析,事实上也不一定,ArrayList在末尾插入和删除数据的话,速度反而比LinkedList要快。



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guoyankun/article/details/8060301

智能推荐

Rust的并发模型相比其他语言有何特点?-程序员宅基地

文章浏览阅读744次,点赞6次,收藏7次。Rust的并发模型结合了线程和异步I/O的优势,通过独特的所有权系统和借用检查器保证了内存安全,无需复杂的运行时垃圾回收机制。Rust作为一种内存安全性的系统编程语言,其并发模型具有独特的特点,与其他语言相比显示出其鲜明的优势。Go语言的并发模型主要基于轻量级的goroutines和channels,非常适合处理高并发的I/O密集型任务。随着异步编程的普及和硬件技术的不断进步,Rust有望在并发编程领域发挥更大的作用。另一方面,Rust的线程是真正的操作系统级线程,可以充分利用多核处理器的优势。

后台接口自动化(基于QT4S)-程序员宅基地

文章浏览阅读2.1k次。目录后台接口自动化(基于QT4S)一、背景:二、技术方案2.1项目目录:2.2接口定义2.3测试用例实现2.4测试数据构造三、复杂场景测试后台接口自动化(基于QT4S)导语 根据测试金字塔理论,自动化收益由高到低依次是单元测试,API接口测试和UI测试。其中单元测试的主体一般是开发人员,API接口测试和UI测试的主体是测试人员。相比迭代变化快、编写成本高而且运行耗时长的UI测试,API接口测试..._qt4s

猴子分桃c语言,猴子分桃。请给出算法-程序员宅基地

文章浏览阅读373次。下面这道题我曾经用计算机编程求过解,感觉几十行代码就可以解出来,但没有成功(已经成了我的心病)。哪位好心人来帮帮这些可怜的猴子吧!五个猴子在一个小岛上发现一堆桃子,他们想平分桃子但怎么也分不开,于是相约去睡觉,明天再分。晚上第一个猴子趁大家熟睡,爬起来吃掉一只桃子,剩下的恰好可以平分成五份,这个猴子拿走其中的一份藏起来,然后重新去睡觉。第二,第三,第四只猴子都照此办理。最后第五只猴子爬起来,吃了一..._c语言猴子分桃子

这家厂商有“100”种方法帮你上云-程序员宅基地

文章浏览阅读201次。早在2018年初,IDC曾发布一组预测数据:2018年云计算环境中部署IT基础设施产品的总开支(服务器、存储和交换机)将达523亿美元,同比增长10.9%。其中公有云数据...

Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id ‘c_failed to apply plugin [id 'com.alipay.bundle']-程序员宅基地

文章浏览阅读1.4k次。开始学习kotlin了,自己创建项目不会出错,导别人的项目出现下面的错Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id 'com.android.application']我试着修改kotlin的版本:ext.kotlin_version保持一致,也不行ext.kotlin_versionGradle版本修改一致还是不行, 百度了下都说加上下_failed to apply plugin [id 'com.alipay.bundle']

sql 获取字符串长度SQL字符串操作汇总_字符串长度sql语句-程序员宅基地

文章浏览阅读7.3w次,点赞3次,收藏16次。--将字符串中从某个字符开始截取一段字符,然后将另外一个字符串插入此处   select stuff('hi,world!',4,4,'****') --返回值hel****orld!   --返回从指定位置开始指定长度的字符串   select substring('Hello,World!',2,10) --返回值ello,World   --将字符串中某段字符替换为指定的字符_字符串长度sql语句

随便推点

[密码学] 密码学基础-程序员宅基地

文章浏览阅读847次,点赞15次,收藏16次。这是因为自行设计的密码算法可能存在未知的漏洞或弱点,而公认的标准算法经过了大量的安全分析和测试。密码算法是一种特殊的算法,它通过数学和计算机科学的技术手段,实现对信息的加密和解密,确保信息在传输过程中不被未经授权的人员读取、篡改或伪造。在互联网的通信中,数据是通过很多计算机或者通信设备相互转发,才能够到达目的地,所以在这个转发的过程中,如果通信包被其他人捕获到,那么数据就不再安全了。密钥就相当于是钥匙,如果要是丢了那么数据必然是不安全的,任何形式的密码,如果密钥丢了,数据的安全性就无法保证了。

python自动刷快手视频_快手加抖音自动刷视频脚本,引用的是python+易语言编程...-程序员宅基地

文章浏览阅读1.1k次。其实这个代码我这边已经整合好了,已有易语言版!!!下面分享的仅仅只是“python”代码先看下易语言版的界面: “python”代码import osimport timeb = 0def video():fun=os.system('adb shell input swipe 300 600 300 100') ##坐标据悉特需自己修定time.sleep(3)if __name__ == '_..._快手刷播放源码

自动化专题讲座:作为自动化工程师,如何才能更好的承担社会责任?_自动化工程师的社会责任-程序员宅基地

文章浏览阅读4.7k次,点赞6次,收藏11次。航空工程的先驱者、美国加州理工大学教授冯·卡门曾说:“科学家研究已有的世界,工程师创造未有的世界。”工程师运用科学技术为谁创造、创造什么样的世界以及怎样创造,都会对人类社会产生重要影响。学科技术犹如双刃剑,它既可以给人类带来福祉和进步,也可以给人类带来灾难和损害。随着科学技术的迅猛发展,工程师对人类社会的影响越来越大。工程师的社会责任感,成为人们越来越重视的问题。2004年在上海举办的世界工程师大会上,中国国务院副总理黄菊曾说: 面对新世纪、新机遇、新挑战,工程师和工程技术界在维护世界和平、促..._自动化工程师的社会责任

使用conan搭建opengl开发环境_conan配置opengl-程序员宅基地

文章浏览阅读446次。使用conan搭建opengl开发环境ConanConan is an open source, decentralized and multi-platform package manager for C/C++ that allows you to create and share all your native binaries.Conan是开源的分布式跨平台的C/C++软件包管理器,可以创建和共享所有本地的二进制库文件。搭建opengl环境项目文件结构创建conanfile.txt配_conan配置opengl

Leetcode刷题笔记(c++)_热题 HOT 100_跳跃游戏-程序员宅基地

文章浏览阅读501次。大厂大厂我来啦,leetcode刷题!

推荐文章

热门文章

相关标签