java数据结构有哪些?,java数据结构有哪些面试
如何解决写爬虫IP受阻的问题?立即使用。
操作环境:windows10系统,java 1.8,thinkpad t480电脑。
Java中有几种常用的数据结构,主要分为两个主要接口:集合和映射(接口只提供方法,不提供实现),程序中最终使用的数据结构是从这些接口继承的数据结构类。
收藏-收藏
Map-sorted Map-TreeMap Map-HashMap
集合列表- (Vector \ ArryList \ LinkedList)
集合-集合-(哈希集\链接哈希集\排序集)列表(界面)
列表是有序的集合。使用这个接口,您可以精确地控制每个元素的插入位置。用户可以通过使用索引(列表中元素的位置,类似于数组标记)来访问列表中的元素,类似于Java的数组。
矢量
基于数组的List其实封装了一些数组没有的函数,很容易避开数组的限制,性能也无法超越数组。因此,如果可能的话,我们应该更多地使用数组。还有一点很重要,Vector是线程同步的,这也是Vector和ArrayList的一个重要区别。
数组列表
和Vector一样,是基于数组的链表,不同的是ArrayList是不同步的。所以在性能上比Vector要好,但是在多线程环境下运行时,需要自己管理线程的同步。
合框架
LinkedList与前两个列表不同。它不是基于阵列的,因此不受阵列性能的限制。
它每个节点包含两个方面:
1.数据);节点本身的;
2.下一个节点(nextNode)的信息。
所以在添加或删除LinkedList时,不需要像基于数组的ArrayList那样移动大量数据。可以通过改变nextNode的相关信息来实现,这是LinkedList的优势。
列表摘要
的所有列表只能保存由不同类型的对象组成的单个表,而不是键-值键-值对。例子:[汤姆,1,c]
所有列表都可以有相同的元素,例如[tom,koo,too,koo]可以在Vector中找到。
所有列表中都可以有空元素,例如[tom,null,1]
基于数组的列表(Vector,ArrayList)适合于查询,而LinkedList适合于添加和删除操作。
设置(接口)
集合是没有重复元素的集合。
哈希特
虽然Set和List都实现了集合接口,但是它们的实现方法却大相径庭。列表基本上是基于数组。但是Set是在HashMap的基础上实现的,这是Set和List的根本区别。HashSet的存储方式是使用HashMap中的键作为Set的对应存储项。看看HashSet的add(Object obj)方法的实现,就一目了然了。
链式散列集
HashSet的子类,链表。
有序集
有序集,由SortedMap实现。
地图(界面)
Map是将key对象与value对象关联起来的容器,value对象可以是Map,以此类推,这样就形成了多级映射。对于关键对象,像Set,Map容器中的关键对象是不允许重复的,这是为了保持搜索结果的一致性;如果有两个key对象是相同的,那么当你想获取那个key对象对应的value对象的时候就会出现问题。可能你得到的不是你想要的价值对象,结果会造成混乱。所以键的唯一性很重要,也符合集合的性质。
当然,在使用过程中,一个键对应的value对象可能会发生变化,然后会根据最后修改的value对象来对应这个键。对于值对象,没有唯一性要求。你可以将任意数量的键映射到一个值对象,这不会产生任何问题(但是,你的使用可能会造成不便,你不知道你得到的哪个键对应的是值对象)。
(免费视频教程分享:java视频教程)
模拟
基于哈希表的Map接口实现。这个实现提供了所有可选的映射操作,并允许使用空值和空键。(HashMap类与Hashtable大致相同,只是不同步,允许null。)这个类不保证映射的顺序,特别是不保证顺序会不变。另外,HashMap是非线程安全的,也就是说,在多线程环境下,可能会出现问题,而Hashtable是线程安全的。
树形图
TreeMap按顺序存储关键字,
散列表
(1)Hashtable是哈希表,它存储的内容是键值映射。
(2)Hashtable从Dictionary继承,实现Map,Cloneable,java.io.Serializable接口。
(3)Hashtable的函数都是同步的,也就是说它是线程安全的。它的键和值不能为空。
几个常用类的区别
1.ArrayList:单元素,效率高,多用于查询。
2.Vector:单元素,线程安全,主要用于查询。
3.链表:单个元素,主要用于插入和删除。
4.Hashmap:元素是成对的,元素可以是空的。
5.Hashtable:元素是成对的,线程安全的,元素不能为空。
Vector、ArrayList和LinkedList
在大多数情况下,ArrayList在性能上是最好的,但是当需要频繁插入和删除集合中的元素时,LinkedList的性能会更好,但是它们的三个性能都不如arrays,Vector是线程同步的。所以:
如果可以使用数组(固定元素类型和固定数组长度),请尽量使用数组而不是列表;
如果没有频繁的删除和插入操作,也不需要考虑多线程,ArrayList是首选;
如果是在多线程条件下使用,考虑Vector;
如果需要经常删除插入,LinkedList会很有用;
如果什么都不懂,可以用ArrayList。
棚
Stack是一种特殊的线性表,只能在一端插入和删除。它根据先入后出的原则存储数据。先入数据被推到堆栈的底部,最后
数据在栈顶。当你需要读取数据时,数据会从栈顶弹出(最后一个数据会先被读出)。
长队
一个特殊的线性表,只允许在表的前面删除,在表的后面插入。继续
插入操作的结束称为队列的结束,删除操作的结束称为队列的头。当队列中没有元素时,称为空队列。
排列
在编程中,为了处理方便,将几个同类型的变量以有序的形式组织起来。这些同类的数字按顺序排列
元素的集合称为数组。在C语言中,数组是构造的数据类型。一个数组可以分解成多个数组元素
元素可以是基本数据类型或构造类型。因此,根据数组元素的类型,数组可以分为数字数组、字符数组和指针数组。
数组、结构数组等类别。
链表
物理存储单元上的一种不连续、无序的存储结构,其中数据元素的逻辑顺序是通过链表中指针链接的顺序来实现的。
链表由一系列节点组成(链表中的每个元素称为一个节点),节点可以在运行时动态生成。每个节点由两部分组成:
一个是存储数据元素的数据字段,另一个是存储下一个节点地址的指针字段。
树
树是具有n(n0)个节点的有限集k,关系n定义在k中,满足以下条件:
(1)只有一个节点k0,它没有关系N的前身,K0称为树的根节点。简称Root。
(2)除了K0之外,K中的每个节点对于关系n只有一个前体。
(3)k中的每个节点可以有关系n的m个后继(m=0)
大量
在计算机科学中,堆是一种特殊的树形数据结构,每个节点都有一个值。当我们通常谈论堆的数据结构时,我们的意思是
两把叉子。堆的特征是根节点的最小值(或最大值),根节点的两个子树也是一个堆。
散列表
如果结构中有一个键和K相同的记录,那么它一定在f(K)的存储位置。因此,不需要比较就可以直接获得搜索到的记录。名字
这个对应关系F就是哈希函数,按照这个思路建立的表就是哈希表。
推荐:java面试问答。以上是java数据结构的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。