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