`
百合不是茶
  • 浏览: 354803 次
社区版块
存档分类
最新评论

Hashmap队列和PriorityQueue队列的应用

阅读更多

 

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()
使用默认的初始容量(11)创建一个 PriorityQueue,并根据其自然顺序对元素进行排序。

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

 

 

 

 

 

 

 

 

 

 

 

1
1
分享到:
评论

相关推荐

    Java超详细!Java实现数据结构PPT课件

    复杂度 时间复杂度 空间复杂度 线性数据结构动态数组(ArrayList) 链表(LinkedList) 单向链表 双向链表 循环链表 静态链表 栈(Stack) 队列(Queue) 双端队列(Deque) ...优先级队列(PriorityQueue)

    java-leetcode题解之第347题前K个高频元素.zip

    Java中处理这类问题通常涉及到哈希表(HashMap)和优先队列(PriorityQueue)的数据结构。哈希表用于存储元素及其出现次数,而优先队列用于找出频率最高的元素。优先队列的特性是总是保持最小的元素在队列头部,这...

    数据结构Java语言

    7. **队列和堆的变种**:例如双端队列(Deque)允许在两端进行插入和删除,优先级队列(PriorityQueue)按优先级顺序处理元素。 在学习《数据结构Java语言》时,你可能会接触到如何使用Java类和接口(如`List`, `...

    use Java, learn about Data Structures of Java.zip

    9. **队列和双端队列(Deque)**:Deque(双端队列)允许在两端进行添加和移除操作,Java的ArrayDeque类是高效的Deque实现。 10. **散列表(HashTable)**:虽然现在已较少使用,但了解HashTable仍然是必要的,它是...

    j2se集合课件是java的基础课程章节之一

    Java集合框架还包含了Queue(队列)、Deque(双端队列)、Stack(栈)等接口和实现,例如LinkedList可以作为双端队列使用,ArrayDeque作为高效栈和队列,PriorityQueue实现了优先队列,能根据元素的优先级进行出队。...

    基于Java+Dijkstra算法的地铁线路换乘最短路径项目(免费提供全部源码)

    使用优先队列(PriorityQueue)实现Dijkstra算法,以提高效率。 初始化起点节点的距离为0,其余节点距离为无穷大。 重复选择未访问节点中距离最小的节点,更新其邻接节点的距离,直到所有节点都被访问。

    BDijkstra算法的java实现 使用工具是eclipse,java1.4以上.zip

    在Java中实现时,可以使用`java.util.PriorityQueue`作为优先队列,`java.util.HashMap`或`java.util.ArrayList`来存储节点及其相关信息,如距离、已访问标记等。此外,确保Java版本在1.4以上,以便能使用这些类库。...

    Java 数据结构 面试用

    5. **队列的变形:优先队列(PriorityQueue)**:优先队列按照优先级顺序进行操作,Java的PriorityQueue类实现了此功能,适用于需要快速找到最大或最小元素的场景。 6. **哈希表**:哈希表(HashMap)通过哈希函数...

    Java 全栈知识点问题汇总(2).pdf

    总之,理解和掌握Java集合框架中的Collection和Map是成为一名合格的Java全栈开发者的基础,它们提供了丰富的数据存储和操作功能,适用于各种应用场景。在实际开发中,根据具体需求选择合适的集合类型和操作方式,...

    java数据结构课件与分析

    理解队列的工作原理,以及优先队列(PriorityQueue)的概念。 5. **集合框架**:Java的`java.util`包提供了丰富的集合类,如ArrayList、LinkedList、HashSet、HashMap等。学习这些集合类的特性和使用场景,以及它们...

    java的集合介绍

    Queue接口代表队列,常见实现有LinkedList(作为Deque双端队列)和PriorityQueue。LinkedList可以作为基本的FIFO(先进先出)队列,而PriorityQueue则按元素优先级进行排序。 Map接口是键值对存储的集合,HashMap和...

    java的数据结构简单演示系统

    4. **队列**:队列是一种先进先出(FIFO)的数据结构,通常用于处理任务队列和消息传递。Java的`java.util.Queue`接口及其实现类如`LinkedList`可以实现队列功能。 5. **栈和队列的变种**:如**优先队列...

    java-datestruct.rar_数据结构

    5. **队列的变种:优先队列(PriorityQueue)**:优先队列根据元素的优先级进行排序,Java中提供了PriorityQueue类来实现。 6. **集合(Collection)**:集合是对象的无序集合,Java提供了ArrayList、LinkedList、...

    huffman编码和反编码的java实现

    这个过程可以使用优先队列(PriorityQueue)来实现,队列中的元素是自定义的Node类,包含字符、频率以及指向左子节点和右子节点的引用。 3. **遍历哈夫曼树生成编码**:从根节点开始,每向左走一步记录一个0,每向...

    哈夫曼数据结构课程设计 java.rar

    - 利用Java的集合框架,如优先队列(PriorityQueue)实现哈夫曼树的构建。 - 使用HashMap或ArrayList等数据结构存储哈夫曼编码表。 - 编写方法实现编码和解码过程,包括构建哈夫曼树、生成编码表、压缩数据以及解...

    JAVA 容器类应用

    本篇文章将深入探讨Java容器类的应用,重点关注其核心特性和常见用法。 首先,我们来了解容器类的基础——`ArrayList`和`LinkedList`。`ArrayList`基于动态数组实现,它支持快速随机访问,但在插入和删除元素时效率...

    JAVA数据结构

    5. **栈和队列的变体**:优先队列(PriorityQueue)提供了根据优先级处理元素的功能,常用于调度和搜索算法。双端队列(Deque)允许在两端进行插入和删除,适用于模拟栈和队列。 6. **树**:树是一种非线性的数据...

    java数据结构

    13. **优先队列(PriorityQueue)**:优先队列根据优先级顺序处理元素,Java的`java.util.PriorityQueue`提供了这种功能。 通过风行java数据结构源代码的学习,你可以深入理解这些概念,并能将它们应用到实际项目中...

    JAVA类集应用

    5. `PriorityQueue`:这是一个基于优先堆实现的队列,元素根据其自然顺序或自定义比较器自动排序。 6. `Collections`工具类:提供了对集合的各种操作,如排序、填充、反转、查找、替换等静态方法。 7. `Stream` ...

    常用数据结构及其算法的Java实现,包括但不仅限于链表、栈,队列,树,堆,图等经典数据结构及其他经典基础算法(如排序.zip

    在学习这些数据结构和算法时,不仅要知道如何实现,还要理解它们的时间复杂度和空间复杂度,以在实际应用中做出最优选择。此外,通过实践编写代码,可以加深对它们的理解,提高编程能力。这个Java实现的资源包正是...

Global site tag (gtag.js) - Google Analytics