Hashtable问题,为什么运行后结果是2 1,不是1 2。初学看不懂。
发布网友
发布时间:2022-05-06 17:26
我来回答
共1个回答
热心网友
时间:2023-10-13 10:03
Hashtable是无序的,跟你的添加顺序无关..是根据key基于散列计算后的排序.
如果想要用有序的key-value 集合, 那么推荐使用LinkedHashMap.
两者之间主要区别如下
Hashtable, 线程安全, 无序
LinkedHashMap ,线程非安全, 有序
所以,如果多线程访问LinkedHashMap ,要主要使用锁,等线程安全技术
参考代码
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;
public class DemoForMap {
public static void main(String args[]) {
Hashtable has = new Hashtable();//无序
has.put("one", new Integer(1));
has.put("two", new Integer(2));
Set s = has.keySet();
for (Iterator<String> i = s.iterator(); i.hasNext();) {
System.out.println(has.get(i.next()));
}
System.out.println("------分割线------");
LinkedHashMap map = new LinkedHashMap<>();//有序
map.put("one", new Integer(1));
map.put("two", new Integer(2));
Set s2 = map.keySet();
for (Iterator<String> i = s2.iterator(); i.hasNext();) {
System.out.println(map.get(i.next()));
}
}
}
热心网友
时间:2023-11-04 11:01
Hashtable是无序的,跟你的添加顺序无关..是根据key基于散列计算后的排序.
如果想要用有序的key-value 集合, 那么推荐使用LinkedHashMap.
两者之间主要区别如下
Hashtable, 线程安全, 无序
LinkedHashMap ,线程非安全, 有序
所以,如果多线程访问LinkedHashMap ,要主要使用锁,等线程安全技术
参考代码
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;
public class DemoForMap {
public static void main(String args[]) {
Hashtable has = new Hashtable();//无序
has.put("one", new Integer(1));
has.put("two", new Integer(2));
Set s = has.keySet();
for (Iterator<String> i = s.iterator(); i.hasNext();) {
System.out.println(has.get(i.next()));
}
System.out.println("------分割线------");
LinkedHashMap map = new LinkedHashMap<>();//有序
map.put("one", new Integer(1));
map.put("two", new Integer(2));
Set s2 = map.keySet();
for (Iterator<String> i = s2.iterator(); i.hasNext();) {
System.out.println(map.get(i.next()));
}
}
}