关于优先队列和hash的简介

本文深入探讨了优先队列的定义、实现及其在选择最大数问题中的应用,同时阐述了哈希结构的基本概念、构成方法以及在查找操作上的优势。通过实例代码演示,帮助读者理解优先队列的常用方法及哈希表的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于优先队列和hash的简介
一.优先队列的引入
JDK API中的定义如下:一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进 行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。优先 级队列不允许使用 null 元素。依靠自然顺序的优先级队列还不允许插入不可比较的对象;
1》add(),的方法:将指定的元素插入到队列中
这个方法的好处在于,它会自动增加队列的长度。
2》clear(),的方法:从此队列中移除所有元素
3》offer() :将指定的元素插入此优先级队列
4》peek()和poll()的区别;前者获取但不移除头元素,后者获取但会移除头元素。二者对于空队 列,都会返回一个null;
至于其它的方法,文档中有很清晰的介绍。
二.自己对于优先队列的看法
如果像文档那样实现各种方法,则需要写很多相关的类。其实我们可以通过一个简单的例题,来表 达其基本的操作。
例:给你很多的数,让你选出其中的10个最大的数。这里很多我们就以100进行量化、
以下是代码的具体实现:
public class MyListQueen {
int s[]=new int[10];
/**
*
* @param a 你要排序的数组
* @return 排好序的数组
*/
public void chushi(int a[]){
for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
//进行交换
if(a[i]>a[j]){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(int k=0;k<10;k++)
s[k]=a[k];
}
/**
*
* 添加元素进行排序的
*/
public void addNode(int x,int i,int j){
if(j-i<=1){
for(int k=0;k<i;k++)
s[k]=s[k+1];
s[i]=x;
return;
}
int middle=(i+j)/2;
if(x<s[middle])
addNode(x,i,middle);
else if(x>s[middle])
addNode(x,middle,j);
}
/**
* 打印的方法
*/
public void Systemlist(){
for(int i=0;i<s.length;i++){
System.out.print(s[i]+",");
}
}
}
一个主类来运行


import java.util.Random;

public class TestList2 {
public static void main(String args[]){
MyListQueen list=new MyListQueen();
int a[]=new int[10];
Random random=new Random();
for(int i=0;i<10;i++){
a[i]=random.nextInt(100);
}
//初始数组
list.paixu(a);
//加入新的元素
for(int j=0;j<100;j++)
list.addNode(random.nextInt(100), 0, 10);//进行优先选择
list.Systemlist(); //打印数据

}

}
我是通过一个固定数组来保存需要的数据,当然你也可以通过固定结点的树来进行优先选择。
当然该问题实际上含有几个变量的。以上是选择最大的数,你也可以选择最小的数。选择的数的数 量也是一个变量。还有从多少数中选择等等。
三.hash结构的深度认识
有人会问,hash的结构是什么样?在我的脑海中,我可以形象的用一个数组加一个链表来描述。数组存放K值,链表并行的放那些具有相同K值的对象。
在这个结构中,时常会听见一些术语。
hash函数:其作用,相当于一个算法规则。给了相应的k值,你就可以通过hash函数求出对应的V值。它是该结构的逻辑支撑。也是产生该结构的 充要条件、(或许有更加精确的解释)
阀值:每个数组对应的链表长度(这是我的理解);
冲突:对于不同的关键字可能得到同一哈希地址,即Key1不等于Key2,而f(Key1)=f(Key2),这种现象称冲突、具有相同函数值的关键字对该哈希函数来说称做同义词。
哈希函数的构造方法:
1.直接定址法
取关键字或关键字的某个线性函数值为哈希地址。即:
H(key)=Key或H(key)=a*Key+b;
其中a和b为常数(这种哈希函数叫做自身函数).
2.数字分析法
取数据元素关键字中某些取值较均匀的数字位作为哈希地址的方法。
等等构造方法,其实去网上我们都可以看到的。这里就不多说。一直想寻求hash表的应用,看了一些,感觉都是很抽象。要说就我所知道,hash表在查找上的应用较为突出。
构造一个hash表,通过hash函数,确定k值和存储地址的关系。通过这个关系,我们可以不通过比较就可以快速的查找出你需要的元素。
还有许多的方法,你可以通过百度了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值