如何根据hashtable的内容对hashtable对象进行排序

qq229 2009-10-17 06:57:18
程序说明:花括号里的内容是<Hashtable<String, String>>对象的内容,每个Hashtable对象都包含两个key(name和age)

List<Hashtable<String, String>> data= new ArrayList<Hashtable<String, String>>();
data对象按顺序包含了以下的Hashtable对象
{name=username002, age=14,}
{name=username001, age=16,}
{name=username004, age=20,}
{name=username010, age=11,}


我要实现的是按顺序name或者age排序后,再将排序后的Hashtable对象重新放到data或者别的list对象里
如:如果我按name排序后,data将重新包含以下内容的Hashtable对象:
{name=username001, age=16,}
{name=username002, age=14,}
{name=username004, age=20,}
{name=username010, age=11,}

请问怎么实现啊,高手帮帮我啊
...全文
170 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
haojia0716 2009-10-21
  • 打赏
  • 举报
回复
建议用HashMap取代Hashtable

如果要对键排序 用TreeMap
如果要对值排序 转化成Set来做 Set里装的是Map.Entry
MEISQ2008 2009-10-21
  • 打赏
  • 举报
回复
本来就是键值,干吗要排序,如果要排序就有其他的如list等等
lz12366007 2009-10-17
  • 打赏
  • 举报
回复
很强。。。。。
qq229 2009-10-17
  • 打赏
  • 举报
回复
谢谢大家的帮忙,大家的代码值得我收藏,我的问题已经解决了。
对于2楼的:我现在是在做项目,你说的将数据封装到类,那是可以的,将每个hashtable放到data对象,最终会根据data对象来生成json数据
swandragon 2009-10-17
  • 打赏
  • 举报
回复
按value值排序

import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Test{

List<Hashtable<String,String>> data = new ArrayList<Hashtable<String,String>>();

private static void printlHt(Hashtable hashtable){
Set set = hashtable.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String key = it.next().toString();
System.out.println(key + " -> " + hashtable.get(key).toString());
}
}

public static void main(String[] args){
Hashtable<String,String> table = new Hashtable<String,String>();
table.put("username002","14");
table.put("username001","16");
table.put("username004","20");
table.put("username010","11");
printlHt(table);
Map.Entry[] set = getSortedHashtable(table);
System.out.println("-------------------------------");
for(int i = 0;i < set.length;i++){
System.out.print(set[i].getKey().toString()+"-->");
System.out.println(set[i].getValue().toString());
}
}

public static Map.Entry[] getSortedHashtable(Hashtable h){
Set set = h.entrySet();
Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]);

Arrays.sort(entries,new Comparator() {
public int compare(Object arg0,Object arg1){
int key1 = Integer.parseInt(((Map.Entry) arg0).getValue().toString());
int key2 = Integer.parseInt(((Map.Entry) arg1).getValue().toString());
return ((Comparable) new Integer(key1)).compareTo(new Integer(key2));
}
});
return entries;
}
}
Dan1980 2009-10-17
  • 打赏
  • 举报
回复
首先这种设计是有问题的,应该把name和age封装到一个类(比如叫User)中,再往List中存入User的实例,而不是用Hashtable。

当然,如果不能重新设计程序,现有数据也是可以排序的,用Comparator即可。

	public static void main(String[] args) {
List <Hashtable <String, String>> data= new ArrayList <Hashtable <String, String>>();
Hashtable<String, String> user1 = new Hashtable<String, String>();
user1.put("name", "username002");
user1.put("age", "14");
data.add(user1);
Hashtable<String, String> user2 = new Hashtable<String, String>();
user2.put("name", "username001");
user2.put("age", "16");
data.add(user2);
Hashtable<String, String> user3 = new Hashtable<String, String>();
user3.put("name", "username004");
user3.put("age", "20");
data.add(user3);
Hashtable<String, String> user4 = new Hashtable<String, String>();
user4.put("name", "username010");
user4.put("age", "11");
data.add(user4);


System.out.println("before sorting...");
System.out.println(data);

System.out.println("sort by name:");
Collections.sort(data, new Comparator < Hashtable <String, String > >() {
public int compare(Hashtable <String, String> arg0, Hashtable <String, String> arg1) {
return arg0.get("name").compareTo(arg1.get("name"));
}
});
System.out.println(data);

System.out.println("sort by age:");
Collections.sort(data, new Comparator < Hashtable <String, String > >() {
public int compare(Hashtable <String, String> arg0, Hashtable <String, String> arg1) {
return Integer.valueOf(arg0.get("age")).compareTo(Integer.valueOf(arg1.get("age")));
}
});
System.out.println(data);
}
amdgaming 2009-10-17
  • 打赏
  • 举报
回复
一个方法 ,你用 TreeMap 实现自己排序 规则 然后放list可以了


TreeMap(Comparator<? super K> c)
构造一个新的空映射,该映射根据给定的比较器进行排序。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧