欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java哈希排序代碼,java哈希碼值

JAVA中用哈希表怎么進行排序

Hashtable類

創(chuàng)新互聯(lián)是專業(yè)的建水網(wǎng)站建設(shè)公司,建水接單;提供成都網(wǎng)站設(shè)計、做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行建水網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

Hashtable繼承Map接口,實現(xiàn)一個key-value映射的哈希表。任何非空(non-null)的對象都可作為key或者value。

添加數(shù)據(jù)使用put(key,

value),取出數(shù)據(jù)使用get(key),這兩個基本操作的時間開銷為常數(shù)。

Hashtable通過initial capacity和load

factor兩個參數(shù)調(diào)整性能。通常缺省的load factor

0.75較好地實現(xiàn)了時間和空間的均衡。增大load

factor可以節(jié)省空間但相應(yīng)的查找時間將增大,這會影響像get和put這樣的操作。

使用Hashtable的簡單示例如下,將1,2,3放到Hashtable中,他們的key分別是”one”,”two”,”three”:

Hashtable numbers = new

Hashtable();

numbers.put(“one”,

new Integer(1));

numbers.put(“two”, new

Integer(2));

numbers.put(“three”,

new Integer(3));

要取出一個數(shù),比如2,用相應(yīng)的key:

Integer

n = (Integer)numbers.get(“two”);

System.out.println(“two = ”

+ n);

由于作為key的對象將通過計算其散列函數(shù)來確定與之對應(yīng)的value的位置,因此任何作為key的對象都必須實現(xiàn)hashCode和equals方法。hashCode和equals方法繼承自根類Object,如果你用自定義的類當作key的話,要相當小心,按照散列函數(shù)的定義,如果兩個對象相同,即obj1.equals(obj2)=true,則它們的hashCode必須相同,但如果兩個對象不同,則它們的hashCode不一定不同,如果兩個不同對象的hashCode相同,這種現(xiàn)象稱為沖突,沖突會導(dǎo)致操作哈希表的時間開銷增大,所以盡量定義好的hashCode()方法,能加快哈希表的操作。

如果相同的對象有不同的hashCode,對哈希表的操作會出現(xiàn)意想不到的結(jié)果(期待的get方法返回null),要避免這種問題,只需要牢記一條:要同時復(fù)寫equals方法和hashCode方法,而不要只寫其中一個。

Hashtable是同步的

java 1.哈希算法的實現(xiàn):

public class Test { /*創(chuàng)建類*/

public static void main(String[] args) {

System.out.println(dg(100));

}

static int dg(int i) { /*定義變量 */

int sum;

if (i == 1) /*假設(shè)條件*/

return 1;

else

sum = i + dg(i - 1); /*1~100的和的表達式*/

return sum; /*返回結(jié)果*/

}

}

這個腳本語言為 Internet 應(yīng)用而生,它可以看作是 Haskell 和 Java 的結(jié)合。

如何對HashMap中的元素進行排序

HashMap是無序的集合,對里面的元素進行排序,需要借助其他有序的集合

傳統(tǒng)的思路: ? 把每一個HashMap的鍵值對作為一個Entry 存入到ArrayListEntry里. ?然后對ArrayList進行排序.

Java8新思路: 利用流對集合進行處理,非常強大, 如果配合上Lambda表達式, 就是簡潔且強大.

參考代碼

import?java.util.HashMap;

//java8?流處理

public?class?Demo1?{

public?static?void?main(String[]?args)?{

HashMapString,?Integer?map?=?new?HashMap();

map.put("lucy",?76);

map.put("tom",?92);

map.put("jack",?86);

//?按照?Key?(名字)進行排序?,并打印

map.entrySet().stream().sorted((e1,?e2)?-?e1.getKey().compareTo(e2.getKey())).forEach(System.out::println);

System.out.println("-------分割線----------");

//?按照value(分數(shù))?進行排序,并打印

map.entrySet().stream().sorted((e1,?e2)?-?e1.getValue().compareTo(e2.getValue())).forEach(System.out::println);

}

}

哈希表設(shè)計的用Java代碼

#include stdio.h

#include string.h

#include stdlib.h

//#include

#define HASH_LEN 50 //哈希表的長度

#define M 47

#define NAME_NO 30 //人名的個數(shù)

typedef struct NAME

{

char *py; //名字的拼音

int k; //拼音所對應(yīng)的整數(shù)

}NAME;

NAME NameList[HASH_LEN];

typedef struct hterm //哈希表

{

char *py; //名字的拼音

int k; //拼音所對應(yīng)的整數(shù)

int si; //查找長度

}HASH;

HASH HashList[HASH_LEN];

/*-----------------------姓名(結(jié)構(gòu)體數(shù)組)初始化---------------------------------*/

void InitNameList()

{

NameList[0].py="chenghongxiu";

NameList[1].py="yuanhao";

NameList[2].py="yangyang";

NameList[3].py="zhanghen";

NameList[4].py="chenghongxiu";

NameList[5].py="xiaokai";

NameList[6].py="liupeng";

NameList[7].py="shenyonghai";

NameList[8].py="chengdaoquan";

NameList[9].py="ludaoqing";

NameList[10].py="gongyunxiang";

NameList[11].py="sunzhenxing";

NameList[12].py="sunrongfei";

NameList[13].py="sunminglong";

NameList[14].py="zhanghao";

NameList[15].py="tianmiao";

NameList[16].py="yaojianzhong";

NameList[17].py="yaojianqing";

NameList[18].py="yaojianhua";

NameList[19].py="yaohaifeng";

NameList[20].py="chengyanhao";

NameList[21].py="yaoqiufeng";

NameList[22].py="qianpengcheng";

NameList[23].py="yaohaifeng";

NameList[24].py="bianyan";

NameList[25].py="linglei";

NameList[26].py="fuzhonghui";

NameList[27].py="huanhaiyan";

NameList[28].py="liudianqin";

NameList[29].py="wangbinnian";

char *f;

int r,s0;

for (int i=0;iNAME_NO;i++)

{

s0=0;

f=NameList[i].py;

for (r=0;*(f+r) != NULL;r++) //方法:將字符串的各個字符所對應(yīng)的ASCII碼相加,所得的整數(shù)做為哈希表的關(guān)鍵字

s0=*(f+r)+s0;

NameList[i].k=s0;

}

}

/*-----------------------建立哈希表---------------------------------*/

void CreateHashList()

{

for (int i=0; iNAME_NO; i ++)

{

HashList[i].py="";

HashList[i].k=0;

HashList[i].si=0;

}

for (i=0; i NAME_NO ; i++)

{

int sum=0;

int adr=(NameList[i].k) % M; //哈希函數(shù)

int d=adr;

if(HashList[adr].si==0) //如果不沖突

{

HashList[adr].k=NameList[i].k;

HashList[adr].py=NameList[i].py;

HashList[adr].si=1;

}

else //沖突

{

do{

d=(d+((NameList[i].k))%10+1)%M; //偽散列

sum=sum+1; //查找次數(shù)加1

}while (HashList[d].k!=0);

HashList[d].k=NameList[i].k;

HashList[d].py=NameList[i].py;

HashList[d].si=sum+1;

}

}

}

/*-------------------------------------查找------------------------------------*/

void FindList()

{

printf("\n\n請輸入姓名的拼音: "); //輸入姓名

char name[20]={0};

scanf("%s",name);

int s0=0;

for (int r=0;r20;r++) //求出姓名的拼音所對應(yīng)的整數(shù)(關(guān)鍵字)

s0+=name[r];

int sum=1;

int adr=s0 % M; //使用哈希函數(shù)

int d=adr;

if(HashList[adr].k==s0) //分3種情況進行判斷

printf("\n姓名:%s 關(guān)鍵字:%d 查找長度為: 1",HashList[d].py,s0);

else if (HashList[adr].k==0)

printf("無該記錄!");

else

{

int g=0;

do

{

d=(d+s0%10+1)%M; //偽散列

sum=sum+1;

if (HashList[d].k==0)

{

printf("無記錄! ");

g=1;

}

if (HashList[d].k==s0)

{

printf("\n姓名:%s 關(guān)鍵字:%d 查找長度為:%d",HashList[d].py,s0,sum);

g=1;

}

}while(g==0);

}

}

/*--------------------------------顯示哈希表----------------------------*/

void Display()

{

printf("\n\n地址\t關(guān)鍵字\t\t搜索長度\tH(key)\t\t拼音 \n"); //顯示的格式

for(int i=0; i15; i++)

{

printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",(HashList[i].k)%M);

printf("\t %s ",HashList[i].py);

printf("\n");

}

printf("按任意鍵繼續(xù)顯示...\n"); //由于數(shù)據(jù)比較多,所以分屏顯示(以便在Win9x/DOS下能看到所有的數(shù)據(jù))

getchar();

for( i=15; i30; i++)

{

printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",(HashList[i].k)%M);

printf("\t %s ",HashList[i].py);

printf("\n");

}

printf("按任意鍵繼續(xù)顯示...\n");

getchar();

for( i=30; i40; i++)

{

printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",(HashList[i].k)%M);

printf("\t %s ",HashList[i].py);

printf("\n");

}

printf("按任意鍵繼續(xù)顯示...\n");

getchar();

for( i=40; i50; i++)

{

printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",(HashList[i].k)%M);

printf("\t %s ",HashList[i].py);

printf("\n");

}

float average=0;

for (i=0;i NAME_NO;i ++)

average+=HashList[i].si;

average/=NAME_NO;

printf("\n\n平均查找長度:ASL(%d)=%f \n\n",NAME_NO,average);

}

/*--------------------------------主函數(shù)----------------------------*/

void main()

{

/* ::SetConsoleTitle("哈希表操作"); //Windows API函數(shù),設(shè)置控制臺窗口的標題

HANDLE hCon = ::GetStdHandle(STD_OUTPUT_HANDLE); //獲得標準輸出設(shè)備的句柄

::SetConsoleTextAttribute(hCon, 10|0); //設(shè)置文本顏色

*/

printf("\n------------------------哈希表的建立和查找----------------------");

InitNameList();

CreateHashList ();

while(1)

{

printf("\n\n");

printf(" 1. 顯示哈希表\n");

printf(" 2. 查找\n");

printf(" 3. 退出\n");

err:

char ch1=getchar();

if (ch1='1')

Display();

else if (ch1='2')

FindList();

else if (ch1='3')

return;

else

{

printf("\n請輸入正確的選擇!");

goto err;

}

}

}

Java HashSet排序問題

hashset是--不保證有序,不是 --保證無序。這個是一種巧合,Integer的hashCode()返回的是它本身,數(shù)據(jù)插入的時候,盡管進行了hash混淆,但是還是不行。

本文標題:java哈希排序代碼,java哈希碼值
網(wǎng)頁地址:http://chinadenli.net/article32/dsgchsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航網(wǎng)站建設(shè)定制網(wǎng)站App設(shè)計虛擬主機定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)