java 多线程 *** 作hashtable(添加,删除,遍历)

java 多线程 *** 作hashtable(添加,删除,遍历),第1张

public class TestThread {

public static void main(String[] args){

Map<Integer, Object>tables = new Hashtable<Integer, Object>()

Thread add = new Thread(new ThreadAdd(tables))

Thread del = new Thread(new ThreadDel(tables))

Thread count = new Thread(new ThreadCount(tables))

//启动线程

add.start()

del.start()

count.start()

}

/**

*添加对象线程

*/

private static class ThreadAdd implements Runnable{

private Map<Integer, Object>table

public ThreadAdd(Map<Integer, Object>tables){

this.table=tables

}

public void run() {

// TODO Auto-generated method stub

for(int i=0i<10i++){

table.put(i, new Object())

System.out.println("添加对象,序号为:"+i)

}

}

}

/**

*删除对象线程

*/

private static class ThreadDel implements Runnable{

private Map<Integer, Object>table

public ThreadDel(Map<Integer, Object>table){

this.table=table

}

public void run() {

// TODO Auto-generated method stub

for(int i=0i<10i++){

try {

Thread.sleep(100)

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

table.remove(i)

System.out.println("移除对象,序号为:"+i)

}

}

}

/**

*统计线程

*/

private static class ThreadCount implements Runnable{

private Map<Integer, Object>table

public ThreadCount(Map<Integer, Object>table){

this.table=table

}

public void run() {

// TODO Auto-generated method stub

for(int i=0i<10i++){

try {

Thread.sleep(50)

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

System.out.println("当前队列还剩"+table.size()+"个对象")

}

}

}

}

这是我的写的demo,不知道符合不符合你的意思,大家共同交流共同进步。

算法设计

已知一个含有100个记录的表,关键字为中国人姓氏的拼音,请给出此表的一个哈希表设计方案,要求在等概率情况下查找成功的平均查找长度不超过3。

(1) 根据平均查找长度不超过3,确定装填因子α;

snl≈1/2(1+(1/(1-α))){使用线性探测再散列解决冲突}

因snl<=3,所以α至少为0.8,取α=0.8.

(2) 根据α确定表长

由α=(表中添入的记录数)/(哈希表的长度)

所以 哈希表的长度=100/α=125

取表长=150;

(3) 选取哈希函数

H(key)=key MOD 149

(4) key 的选取方法。

设大写字母在表中用1..26 表示,小写字母用27--52 表示。每个人的姓名取四个字

 母(两字姓名取首尾两个字母,三字姓名取各字拼音第一个字母,中间字取首尾两

 个拼音字母)。

将前两个拼音字母的序号并起来,后两个也并起来, 然后相加形成关键字。要求姓名

 的第一个拼音字母要大写,如姓名'王丽明'拼音为'Wang liming',取出四个拼音字母

 为'W,l,i,m',个字母序号依次为 23 38 35 39,组成关键字为 2338+3539=5877,该姓

 名的哈希地址为 5877 MOD 149=66。

(5) 用线性探测再散列处理冲突。

这是设计原理,别的要求没拉:(


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11423678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存