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,不知道符合不符合你的意思,大家共同交流共同进步。

同意fancyivan的答案

Hashtable h1 = new Hashtable()

Hashtable h2 = new Hashtable()

Hashtable h3 = new Hashtable()

h3.Add(001,"abc")

例如这h1,h2,h3这三个hashtable,h3里面有一个键值对(001,"abc")

然后把h3这个hashtable添加到h2里面

h2.Add(001,h3)(或者h2[001]=h3)

然后你这句h1=(hashtable)h2[001]就相当于把h3这个hashtable赋给了h1

当你遍历h1的时候结果就是(1,"abc")

hashtable是只有指定key才可以赋值,而你这句是相当与把一个hashtable赋给了另一个hashtable,所以不用指定key

一 简介

名词介绍 散列表(Hash table 也叫哈希表) 是根据关键码值(Key value)而直接进行访问的数据结构 也就是说 它通过把关键码值映射到表中一个位置来访问记录 以加快查找的速度 这个映射函数叫做散列函数 存放记录的数组叫做散列表

HashTable 表的优点 HashTable是System Collections命名空间提供的一个容器 HashTable中的key/value均为object类型 所以HashTable可以支持任何类型的key/value键/值对

HashTable的优点就在于其索引的方式 速度非常快

二 哈希表的简单 *** 作

在哈希表中添加一个keyvalue键值对 HashtableObject Add(key value)

在哈希表中去除某个keyvalue键值对 HashtableObject Remove(key)

从哈希表中移除所有元素 HashtableObject Clear()

判断哈希表是否包含特定键key HashtableObject Contains(key)

下面控制台程序将包含以上所有 *** 作

using System

using System Collections       //file使用Hashtable时 必须引入这个命名空间

class hashtable

{

public static void Main()

{

Hashtable ht=new Hashtable()  //file创建一个Hashtable实例

ht Add(E e)                   //添加keyvalue键值对

ht Add(A a)

ht Add(C c)

ht Add(B b)

string s=(string)ht[A]

if(ht Contains(E))             //file判断哈希表是否包含特定键 其返回值为true或false

Console WriteLine(the E keyexist)

ht Remove(C)                 //移除一个keyvalue键值对

Console WriteLine(ht[A])     //此处输出a

ht Clear()                   //移除所有元素

Console WriteLine(ht[A])     //file此处将不会有任何输出

}

}

三 遍历哈希表

遍历哈希表需要用到DictionaryEntry Object 代码如下

for(DictionaryEntry de in ht) // fileht为一个Hashtable实例

{

Console WriteLine(de Key)   //de Key对应于keyvalue键值对key

Console WriteLine(de Value)//de Key对应于keyvalue键值对value

}

四 对哈希表进行排序

对哈希表进行排序在这里的定义是对keyvalue键值对中的key按一定规则重新排列 但是实际上这个定义是不能实现的 因为我们无法直接在Hashtable进行对key进行重新排列 如果需要Hashtable提供某种规则的输出 可以采用一种变通的做法

ArrayList akeys=new ArrayList(ht Keys)  // file别忘了导入System Collections

akeys Sort()                           // file按字母顺序进行排序

for(string skey in akeys)

{

Console Write(skey + )

Console WriteLine(ht[skey])            // 排序后输出

lishixinzhi/Article/program/net/201311/12422


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

原文地址:https://54852.com/bake/11387062.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存