JAVA中常用集合数据结构在算法中的适用场景

目录

1. JAVA集合的分类

1.1 按照实现的接口不同可以分为实现Collection接口和实现Map接口

1.2 按照是否是线程安全进行划分

2. 关于List接口下的数据结构在算法中的应用

3. 关于Set集合在算法中的适用场景

4. 关于Queue接口的数据结构在算法中的应用

 5. 关于Map接口在算法中的应用


1. JAVA集合的分类

1.1 按照实现的接口不同可以分为实现Collection接口和实现Map接口

对于Collection接口下的集合类型主要有三类,分别是Set,List,Queue这三类,常用到的实现类是Set的实现类主要有HashSet,TreeSet。List的主要实现类有ArrayList,LinkedList,Stack这三个实现类,Queue接口的实现类主要有PriorityQueue和ArrayDeque这两个实现类。

对于Map的实现类有HashMap,Hashtable,TreeMap实现类。

1.2 按照是否是线程安全进行划分

java中线程安全的集合有Vector和Hashtable其他的都是非线程安全的。另外在java.util.concurrent下的类都是线程安全的。

2. 关于List接口下的数据结构在算法中的应用

List接口下的ArrayList的底层实现是Object[]数组,Vector的实现也是Object[]数组,LinkedList的底层实现是双向链表。

List接口下的ArrayList和LinkedList数据结构是我们在进行数据处理时最常用的数据结构,因为该接口下的方法较多,而且存取数据较为方便。

如果需要对一组数据进行复杂的操作,例如对一组数据的第n个进行修改,或者是删除第n个数据等。而且这组输入又没有先入先出或者其他的一些场景需求,我们可以使用List接口下的实现类。

3. 关于Set集合在算法中的适用场景

HashSet的底层是基于HashMap实现的,采用HashMap保存元素。

对于Set这个数据结构,我们可以巧妙地利用他集合中元素唯一的特性,解一些算法题。例如力扣中的剑指Offer49求丑数这道题,具体的题目如下所示:

 因为只包含质因子2、3、5所以我们可以将这几个质因子和已经找到的丑数相乘得到的还是丑数,但是在乘的时候可能会得到两个值相同的丑数,比如2*3*5=30,3*2*5=30,所以为了不将这些已经遍历过的丑数加入到我们的遍历中。就可以用Set这个数据结构进行储存遍历过的丑数,具体的解法如下所示。

对于二叉树的DFS,BFS,还有图的DFS,BFS中为了不存储已经遍历过的结果,或者为了避免图的遍历中的死循环,通常也可以采用Set这个数据结构存储已经遍历过的数据。

4. 关于Queue接口的数据结构在算法中的应用

Queue接口中的PriorityQueue(优先队列)是采用Object[]数组实现二叉堆,而ArrayQueue是采用Object[]+双指针实现双端队列。

Queue接口下的实现类主要有PriorityQueue类和ArrayDequeue类。PriorityQueue(优先队列)在算法中的应用较为广泛。可以解决一些如求最小的K对数字,第m个最大的数等这些问题。具体的一道题如力扣373所示:

 我们可以使用一个优先队列的数据结构存储遍历到的数据的较小值:

 5. 关于Map接口在算法中的应用

Map数据结构可以描述两个数据之间的联系,能够通过一个数据映射到另外一个数据。这是Map数据结构的主要特性。利用这一特性,可以很方便解决一些算法题,如下面的剑指Offer33这道题,这道题的本质是要将一个字符数组中使用相同字符的不同的字符串归纳到一个字符串数组中。

 这道题看起来有些难度,但是如果使用哈希表Map数据结构进行做的话就会很简单。我们将字符数组中出现的每一个构成字符串的所有的字符的从小大的排列作为哈希表的键,字符数组中每一个字符串如果能用哈希表中的键构成就把他加到键对应的值上。

对于一些一个数据与另外一个数据或者一组数据有映射关系的算法题,我们利用哈希表的数据结构可以十分快捷高效地解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java数据结构算法(第二版)》是一本面向Java编程语言的数据结构算法教材。该书旨在帮助读者掌握常见的数据结构算法,以提升编程效率和解决问题的能力。 该书主要包括以下内容: 1. 前导知识:书首先介绍了Java编程语言的基础知识,例如面向对象编程、泛型、集合框架等。这为读者理解后续章节的数据结构算法打下了基础。 2. 数据结构:该书详细介绍了常见的数据结构,包括线性数据结构(如数组、链表、栈、队列)和非线性数据结构(如树、图、堆、哈希表)。每种数据结构都通过实例详细讲解了其原理、操作和应用场景。 3. 算法:书接着介绍了常见的算法,例如查找算法(如线性查找、二分查找、哈希查找)、排序算法(如冒泡排序、快速排序、归并排序)等。每种算法都配有分析和实例,帮助读者理解算法的实现原理、时间复杂度和空间复杂度。 4. 高级主题:在基本数据结构算法的基础上,该书进一步介绍了一些高级主题,如图算法、动态规划算法等。这些高级主题对于解决复杂问题和提升程序的效率非常重要。 总的来说,该书通过简单清晰的语言、详细的示例和练习题,帮助读者系统地学习和理解Java数据结构算法。无论是初学者还是有一定编程经验的开发者,都可以通过学习这本书,提升自己在数据结构算法方面的能力,从而更好地应对编程任务和解决实际问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值