导航:首页 > 编程语言 > hashtable遍历java

hashtable遍历java

发布时间:2022-09-04 05:02:20

1. 请问各位java达人关于hashtable的问题,急啊!

统计考生人数:你可以定义一个计数器,读取考生信息到一个集合中,判断考生的学号 如果不相同就加1 然后把这个集合中所有考生学号是这个的信息删除,这样加下来就不会有重复的;
最高分 最低分 这两个最简单 只要把考生信息中的某一行进行比较(就是某一科目)就是排序就OK了 然后输出对应的考生名和其他信息
平均分:应该是某一科目的平均分吧 就把这一科目中的所有成绩相加 再处以考生人数 刚才已经有考生人数了 如果要算所有科目的平均分 就把这几个科目的平均分相加 再除以科目总数就OK了
及格人数 再定义一个计数器 做循环 判断考生在该课程中的分数是否小于60,如果小于60分就把现在刚才那个计数器-1,到最后就是及格人数了

还有你那个想法 你应该有数据库吧 不知道你用什么数据库 mysql或者是其他不管什么数据库 中的数据表都是存放数据的 学生表里应该有什么属性自己应该先想好了学生表: 学生ID 学生名字 学生班级 学生专业名称 等等吧
专业信息表: 专业名称 课程名称
成绩表:课程名称 考生ID 考生成绩
这几个表要有连接关系 尽量减少冗余
当然我这是随便写了几个表 你可以根据自己的想法写 最好跟同学商量商量
写程序的时候最好是先设计数据库 你写好的程序最后是要显示和处理数据库中的数据的,不先设计好数据库 等你程序写完了 数据库再有大的改动 你的程序就得大改了 甚至有可能得重写程序
关于那个hashtable 我觉得不用它 跟上面说的一样 在这里不是很好用

2. java问题,如何遍历,这一个hashtable是啥意思

HashTable和HashMap是一样的,区别只是同步与异步问题;
遍历方式和map一样
两种方式
使用keySet方法获得所有的key,然后变量这个Set
或者是使用EntrySet方法,获得所有键值对的视图,遍历可获得所有的key和value

3. Java中HashMap和Hashtable之间的区别

Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现.

也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是.这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步.一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回.这个对象的方法可以让你同步访问潜在的HashMap.这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用.

第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value.HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value.这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null.如果有必要,用containKey()方法来区别这两种情况.

一些资料建议,当需要同步时,用Hashtable,反之用HashMap.但是,因为在需要时,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable.

关于Properties
有时侯,你可能想用一个hashtable来映射key的字符串到value的字符串.DOS、Windows和Unix中的环境字符串就有一些例子,如key的字符串PATH被映射到value的字符串C:\WINDOWS;C:\WINDOWS\SYSTEM.Hashtables是表示这些的一个简单的方法,但Java提供了另外一种方法.

Java.util.Properties类是Hashtable的一个子类,设计用于String keys和values.Properties对象的用法同Hashtable的用法相象,但是类增加了两个节省时间的方法,你应该知道.

Store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中.Load()方法正好相反,用来读取文件,并设定Properties对象来包含keys和values.

注意,因为Properties扩展了Hashtable,你可以用超类的put()方法来添加不是String对象的keys和values.这是不可取的.另外,如果你将store()用于一个不包含String对象的Properties对象,store()将失败.作为put()和get()的替代,你应该用setProperty()和getProperty(),它们用String参数.

4. java 多线程操作hashtable(添加,删除,遍历)

Hashtable 表示键/值对的集合,这些键/值对根据键的哈希代码进行组织,它的Key不能为null,Value可以为null,这一点与Hashmap不同(本身不是线程安全的),对于Hashtable它是实现了IDictionary和ICollection接口的,它的key与value都是object类型的,不支持泛型,进行类型转换成需要装箱与拆箱(boxing,unboxing),这在性能肯定会有一些影响,所以,微软这边给出了支持泛型的键值对集合Dictionary,而Dictionary本身也不是线程安全的,我们需要对它加锁(lock),才能避免多线程环境下产生的一些错误。
下面我们来看一下线程安全的Hashtable代码片断:
Hashtable ht = Hashtable.Synchronized(new Hashtable());
ht.Add("ok", null);
Console.WriteLine(ht["ok"]);

我们在来看一下Dictionary对象,可以使它基类提供的SyncRoot属性,来实现它内部对象的线程安全
Dictionary<string, string> dic = new Dictionary<string, string>();
lock ((dic as ICollection).SyncRoot)
{
dic.Add("ok", "ok value");
}

下面我们来做一个实例,还是Dictionary的线程安全问题,我们有两个线程,t1和t2,当我们为它加lock之后,t1纯种在进行dic.Ad操作时,t2并不能进行访问
当t1完成add操作后,t2线程才进行执行,这时它就可以改变dic 元素的值了,程序运行正常,但如果没有lock锁机制,t1与 t2线程谁先执行就不确定了,这时,
如果t1先执行,当然没有问题,但如果t2先操作了,程序出现异常,因为dic元素没有被add,所以无法改变其值。
看代码:

Dictionary<string, string> dic = new Dictionary<string, string>();

Thread t1 = new Thread(() =>
{
lock ((dic as ICollection).SyncRoot) //dic对象被保存,处于临界区
{
dic.Add("ok1", "ok value1");//这句先向字典添加
}
});

Thread t2 = new Thread(() =>
{
lock ((dic as ICollection).SyncRoot)
{
dic["ok1"] = "ok value2";
}
});

t1.Start();
t2.Start();
Thread.Sleep(2000);

而对于Hashtable来说,如果希望对它进行写加锁,读不加锁,也可以通过lock在代码段时去实现

Thread t1 = new Thread(() =>
{
lock (ht.SyncRoot)
{

ht.Add(i, i);
}
});

OK,对于hashtable的线程安全这块就说到这里,最后和大家说一下,咱们做WEB开发的工程师们,一定要注意线程安全这块的知识,因为你写的程序,肯定是处
于多线程环境下的

5. JAVA Set Iterator遍历的顺序是怎么样的

可以用java.util.LinkedHashMap 就是按加入时的顺序遍历了。
类似的还有 java.util.LinkedHashSet

6. 工作中你是如何用Java 遍历 Map的呢

在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。

既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等)

方法一、 在for-each循环中使用entries来遍历

这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。

作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。

总结

如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。

7. 新人求解,为什么遍历Hashtable输出的顺序是反的

hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这个对象的 hashCode 值之后,系统会根据该 hashCode 值来决定该元素的存储位置。
一般来说hasmap存的是无序的

8. java中hashtable怎样存储数据和读取数据

Hashtable-哈希表类

以哈希表的形式存储数据,数据的形式是键值对.
特点:
查找速度快,遍历相对慢
键值不能有空指针和重复数据

创建
Hashtable<Integer,String> ht=new
Hashtable<Integer,String>();

添值

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

取值

String str=ht.get(1);
System.out.println(str);// Andy

对键进行遍历

Iterator it = ht.keySet().iterator();

while (it.hasNext()) {
Integer key = (Integer)it.next();

System.out.println(key);
}

对值进行遍历

Iterator it = ht.values().iterator();

while (it.hasNext()) {
String value =(String) it.next();

System.out.println(value);
}

取Hashtable记录数

Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

int i=ht.size();// 7

删除元素

Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

ht.remove(1);
ht.remove(2);
ht.remove(3);
ht.remove(4);

System.out.println(ht.size());// 3

Iterator it = ht.values().iterator();

while (it.hasNext()) {
// Get value
String value =(String)
it.next();
System.out.println(value);
}

9. java中HashMap和HashTable有什么共同点和区别

HashMap和Hashtable都实现了Map接口,主要的区别有:
1、同步方面:Hashtable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap。
2、赋值方面:Hashtable不允许 null 值(key 和 value 都不可以),HashMap允许 null 值(key和value都可以)。
3、遍历方式不同:Hashtable比HashMap多一个elements方法。
4、动态数组增加方式不同:Hashtable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

阅读全文

与hashtable遍历java相关的资料

热点内容
unix网络编程卷4 浏览:805
找靓机app下单什么时候发货 浏览:411
android一个应用两个进程 浏览:801
linux硬盘复制 浏览:806
php图片服务器搭建 浏览:798
下载压缩文件怎么打开 浏览:192
新建文件夹叫什么名字 浏览:565
windows20的开机命令 浏览:332
微信一般在电脑的那个文件夹 浏览:509
go在win7下编译特别慢 浏览:256
光遇ios耳机安卓为什么没有 浏览:904
小米手机桌面文件夹经常自动散开 浏览:607
小米电话手表用什么app进行设置 浏览:265
虚拟打印机pdf下载 浏览:671
jdk编译运行方法 浏览:459
android执行shell命令 浏览:349
程序员头像女 浏览:57
有什么可以变头发颜色的app 浏览:935
玩具解压屋游戏下载 浏览:849
我的世界拔刀剑服务器地址id 浏览:891