HashMap队列已经是学过了的,但是最近在用的时候不是很熟悉,刚刚重新看以一次,
HashMap是K,v键 ,值
put()添加元素
//下面试HashMap去掉重复的
package com.hashMapandPriorityQueue; import java.util.HashMap; import java.util.Set; public class map{ public static void main(String[] args) { //创建队列 HashMap<String,Integer> map = new HashMap<String,Integer>(); //往队列添加元素 map.put("长沙", 1); map.put("长沙", 2); map.put("常德",2); map.put("武汉", 3); //遍历队列 通过k键得到v值 Set<String> maps = map.keySet(); //遍历k键 for(String k:maps){ int v= map.get(k); System.out.println(k+"<<>>>"+v); } } }
运行结果:
长沙<<>>>2
武汉<<>>>3
常德<<>>>2
//HashMap判断字符串出现的次数
package com.hashMapandPriorityQueue.com; /** * 创建HashMap来遍历每个字符串出现的个数 */ import java.util.HashMap; import java.util.Set; public class hashMap { public static void main(String[] args) { hashMap test = new hashMap(); // 创建字符串 String str = "abbcccddddeeeee"; System.out.println(test.createmap(str)); } public HashMap<Character, Integer> createmap(String str) { // 创建HashMap队列保存k,v对,其中k键是唯一的 v值是不唯一的, // 如果k键存在多个后面的会覆盖掉前面的 ,,set打印的是最后一个 但是前面的还是存在的 HashMap<Character, Integer> map = new HashMap<Character, Integer>(); //遍历字符串 for(int i = 0;i<str.length();i++){ //将字符串转成字符 char c = str.charAt(i); //判断是否包含元素 if(map.containsKey(c)){ //得到元素 int v= map.get(c); v++; map.put(c, v); }else{ map.put(c,1); } } return map; } }
运行结果:
{d=4, e=5, b=2, c=3, a=1}
PriorityQueue<E>队列可以在创建的时候对添加的数据进行自动排序(基本数据),对象可以通过重写方法来定义排序的规则
一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator
进行排序,具体取决于所使用的构造方法
|
PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
使用指定的初始容量创建一个 PriorityQueue
,并根据指定的比较器对元素进行排序。
方法摘要
E |
peek() 获取但不移除此队列的头;如果此队列为空,则返回 null。 |
E |
poll() 获取并移除此队列的头,如果此队列为空,则返回 null。 |
//基本数据类型添加到队列
package com.hashMapandPriorityQueue; import java.util.PriorityQueue; /** * 基本数据类型 * * @author Administrator * */ public class priorityQueue { public static void main(String[] args) { // 创建队列 PriorityQueue<String> queue = new PriorityQueue<String>(); // 添加队列 queue.add("长沙"); queue.add("北京"); queue.add("南京"); queue.add("南宁"); //遍历队列 for (String s : queue) { System.out.println(s); } } }
运行结果;
北京
南宁
南京
长沙
将对象添加到PriorityQueue<E>中:
创建一个PriorityQueue队列来保存Queue实例化的对象 ;代码如下
package com.hashMapandPriorityQueue; import java.util.Comparator; import java.util.PriorityQueue; /** * 创建一个PriorityQueue队列来保存Queue实例化的对象 * * @author Administrator * */ public class priorityQueue { public static void main(String[] args) { // 创建队列,并创建容器的容量和排序规则 PriorityQueue<Queue> list = new PriorityQueue<Queue>(11, new Comparator<Queue>() { //创建匿名类来重写排序方法 @Override public int compare(Queue o1, Queue o2) { //返回排序规则 return o1.obj - o2.obj; } }); // 如果不重写上述方法,会出现下面的错误 // Exception in thread "main" java.lang.ClassCastException: // com.hashMapandPriorityQueue.priorityQueue cannot be cast to // java.lang.Comparable // 根据数组创建对象 Queue queue1 = new Queue(122); Queue queue2 = new Queue(21); Queue queue3 = new Queue(33); //添加到队列中 list.add(queue1); list.add(queue2); list.add(queue3); //打印队列中的元素 while (!list.isEmpty()) { System.out.println(list.poll()); } } } //创建Queue类 class Queue { int obj; public Queue(int obj) { this.obj = obj; } //重写String的方法 @Override public String toString() { return String.valueOf(obj); } }
输出结果:
21
33
122
相关推荐
复杂度 时间复杂度 空间复杂度 线性数据结构动态数组(ArrayList) 链表(LinkedList) 单向链表 双向链表 循环链表 静态链表 栈(Stack) 队列(Queue) 双端队列(Deque) ...优先级队列(PriorityQueue)
Java中处理这类问题通常涉及到哈希表(HashMap)和优先队列(PriorityQueue)的数据结构。哈希表用于存储元素及其出现次数,而优先队列用于找出频率最高的元素。优先队列的特性是总是保持最小的元素在队列头部,这...
7. **队列和堆的变种**:例如双端队列(Deque)允许在两端进行插入和删除,优先级队列(PriorityQueue)按优先级顺序处理元素。 在学习《数据结构Java语言》时,你可能会接触到如何使用Java类和接口(如`List`, `...
9. **队列和双端队列(Deque)**:Deque(双端队列)允许在两端进行添加和移除操作,Java的ArrayDeque类是高效的Deque实现。 10. **散列表(HashTable)**:虽然现在已较少使用,但了解HashTable仍然是必要的,它是...
Java集合框架还包含了Queue(队列)、Deque(双端队列)、Stack(栈)等接口和实现,例如LinkedList可以作为双端队列使用,ArrayDeque作为高效栈和队列,PriorityQueue实现了优先队列,能根据元素的优先级进行出队。...
使用优先队列(PriorityQueue)实现Dijkstra算法,以提高效率。 初始化起点节点的距离为0,其余节点距离为无穷大。 重复选择未访问节点中距离最小的节点,更新其邻接节点的距离,直到所有节点都被访问。
在Java中实现时,可以使用`java.util.PriorityQueue`作为优先队列,`java.util.HashMap`或`java.util.ArrayList`来存储节点及其相关信息,如距离、已访问标记等。此外,确保Java版本在1.4以上,以便能使用这些类库。...
5. **队列的变形:优先队列(PriorityQueue)**:优先队列按照优先级顺序进行操作,Java的PriorityQueue类实现了此功能,适用于需要快速找到最大或最小元素的场景。 6. **哈希表**:哈希表(HashMap)通过哈希函数...
总之,理解和掌握Java集合框架中的Collection和Map是成为一名合格的Java全栈开发者的基础,它们提供了丰富的数据存储和操作功能,适用于各种应用场景。在实际开发中,根据具体需求选择合适的集合类型和操作方式,...
理解队列的工作原理,以及优先队列(PriorityQueue)的概念。 5. **集合框架**:Java的`java.util`包提供了丰富的集合类,如ArrayList、LinkedList、HashSet、HashMap等。学习这些集合类的特性和使用场景,以及它们...
Queue接口代表队列,常见实现有LinkedList(作为Deque双端队列)和PriorityQueue。LinkedList可以作为基本的FIFO(先进先出)队列,而PriorityQueue则按元素优先级进行排序。 Map接口是键值对存储的集合,HashMap和...
4. **队列**:队列是一种先进先出(FIFO)的数据结构,通常用于处理任务队列和消息传递。Java的`java.util.Queue`接口及其实现类如`LinkedList`可以实现队列功能。 5. **栈和队列的变种**:如**优先队列...
5. **队列的变种:优先队列(PriorityQueue)**:优先队列根据元素的优先级进行排序,Java中提供了PriorityQueue类来实现。 6. **集合(Collection)**:集合是对象的无序集合,Java提供了ArrayList、LinkedList、...
这个过程可以使用优先队列(PriorityQueue)来实现,队列中的元素是自定义的Node类,包含字符、频率以及指向左子节点和右子节点的引用。 3. **遍历哈夫曼树生成编码**:从根节点开始,每向左走一步记录一个0,每向...
- 利用Java的集合框架,如优先队列(PriorityQueue)实现哈夫曼树的构建。 - 使用HashMap或ArrayList等数据结构存储哈夫曼编码表。 - 编写方法实现编码和解码过程,包括构建哈夫曼树、生成编码表、压缩数据以及解...
本篇文章将深入探讨Java容器类的应用,重点关注其核心特性和常见用法。 首先,我们来了解容器类的基础——`ArrayList`和`LinkedList`。`ArrayList`基于动态数组实现,它支持快速随机访问,但在插入和删除元素时效率...
5. **栈和队列的变体**:优先队列(PriorityQueue)提供了根据优先级处理元素的功能,常用于调度和搜索算法。双端队列(Deque)允许在两端进行插入和删除,适用于模拟栈和队列。 6. **树**:树是一种非线性的数据...
13. **优先队列(PriorityQueue)**:优先队列根据优先级顺序处理元素,Java的`java.util.PriorityQueue`提供了这种功能。 通过风行java数据结构源代码的学习,你可以深入理解这些概念,并能将它们应用到实际项目中...
5. `PriorityQueue`:这是一个基于优先堆实现的队列,元素根据其自然顺序或自定义比较器自动排序。 6. `Collections`工具类:提供了对集合的各种操作,如排序、填充、反转、查找、替换等静态方法。 7. `Stream` ...
在学习这些数据结构和算法时,不仅要知道如何实现,还要理解它们的时间复杂度和空间复杂度,以在实际应用中做出最优选择。此外,通过实践编写代码,可以加深对它们的理解,提高编程能力。这个Java实现的资源包正是...