基本思路是先获取哈希表中所有值为1的键名,然后用这些键名引用相应元素,并移除这些元素。
//生成Hash表。Hashtable hashtable = new Hashtable()
hashtable.Add("name", "Tome")
hashtable.Add("age", 18)
hashtable.Add("sex", "男")
hashtable.Add("补考次数", 1)
hashtable.Add("重修次数", 1)
//找到所有值为1的键名。
string[] keys = hashtable.Keys.Cast<string>().Where(x => hashtable[x].Equals(1)).ToArray()
//移除相应键名对应的元素。
foreach (string key in keys)
hashtable.Remove(key)
//显示Hash表当前所有元素。
foreach (DictionaryEntry entry in hashtable)
Console.WriteLine(entry.Key + "\t" + entry.Value)
Console.ReadKey()
运行结果:
小知识:
HashTable类(哈希表):每个元素都是一个存储在 DictionaryEntry
对象中的键/值对。键不能为 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing),但值可以。
在哈希表中,根据指定键名获取或设置相应值的运算复杂度为 O(1),判断指定键名是否存在的运算复杂度也是 O(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,不知道符合不符合你的意思,大家共同交流共同进步。
Hashtable的定义和方法1、 Hashtable构造函数
HashTable的优点就在于其索引的方式,速度非常快。
Hashtable常用的两种构造函数:public Hashtable() public Hashtable(int capacity)
2、向Hashtable添加元素
向Hashtable添加元素时,可以采用系统提供的Add方法。其语法格式如:public virtual void Add(Object key,Object value)
下面举个详细点的例子如:
Hashtable hashtable = new Hashtable() //实例化Hashtable对象
hashtable.Add("id", "600719")//向Hashtable哈希表中添加元素
hashtable.Add("name", "denylau")
hashtable.Add("sex", "男")
Console.WriteLine(hashtable.Count) //获得Hashtable哈希表中的元素个数
3、删除Hashtable中的元素
·Clear方法:该方法用来移除Hashtable中的所有元素,其语法格式如:public virtual void Clear()
·Remove方法:该方法用来从Hashtable中移除带有指定键的元素,其语法格式如下:public virtual void Remove(Object value)
4、Hashtable的遍历
遍历其实与数组类似,但是Hashtable中的元素是一个键值对的集合,因此需要使用DictionaryEntry类型来遍历,
例如:
Hashtable hashtable = new Hashtable() //实例化Hashtable对象
hashtable.Add("id", "600719") //向Hashtable哈希表中添加元素
hashtable.Add("name", "denylau")
hashtable.Add("sex", "男")
Console.WriteLine("\\t 键\\t 值")
//遍历Hashtable哈希表中的元素并输出其键值对
foreach (DictionaryEntry dicEntry in hashtable)
{
Console.WriteLine("\\t " + dicEntry.Key + "\\t " + dicEntry.Value)
}
Console.WriteLine()
参考资料: http://www.studyofnet.com/news/76.html
希望以上的回答能够帮到你!
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)