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

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值