我需要根据存储在其中的值对我的HashMap进行排序.HashMap包含电话中存储的联系人姓名.

此外,我还需要在对值进行排序后立即自动对键进行排序,或者您可以说键和值绑定在一起,因此值中的任何更改都应该反映在键中.

HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"froyo");
map.put(2,"abby");
map.put(3,"denver");
map.put(4,"frost");
map.put(5,"daisy");

所需输出:

2,abby;
5,daisy;
3,denver;
4,frost;
1,froyo;

推荐答案

假设使用Java,可以按如下方式对hashmap进行排序:

public LinkedHashMap<Integer, String> sortHashMapByValues(
        HashMap<Integer, String> passedMap) {
    List<Integer> mapKeys = new ArrayList<>(passedMap.keySet());
    List<String> mapValues = new ArrayList<>(passedMap.values());
    Collections.sort(mapValues);
    Collections.sort(mapKeys);

    LinkedHashMap<Integer, String> sortedMap =
        new LinkedHashMap<>();

    Iterator<String> valueIt = mapValues.iterator();
    while (valueIt.hasNext()) {
        String val = valueIt.next();
        Iterator<Integer> keyIt = mapKeys.iterator();

        while (keyIt.hasNext()) {
            Integer key = keyIt.next();
            String comp1 = passedMap.get(key);
            String comp2 = val;

            if (comp1.equals(comp2)) {
                keyIt.remove();
                sortedMap.put(key, val);
                break;
            }
        }
    }
    return sortedMap;
}

这只是一个开始的例子.这种方法更有用,因为它对HashMap进行排序,并保留重复的值.

Java相关问答推荐

让两个方法来回调用有缺点吗?

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

使用动态ID从json获取详细信息的Jolt规范

Spark上下文在向Spark提交数据集时具有内容,但Spark在实际构建它时发现它为空

将带有js文件的 bootstrap 程序导入maven项目时出错

Spring @Value default无法计算表达式

声明MessageChannel Bean的首选方式

声明带有泛型的函数以用作查找映射中的值

如何在我的世界中为互动增加冷却时间?

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

JNI:将代码打包成自包含的二进制文件

与IntArray相比,ArrayList<;Int>;对于大量元素的性能极差

基于配置switch 的@Controller的条件摄取

Java 11 HttpCookie.parse在解析包含JSON的Cookie时引发IlLegalArgumentException

JavaFX标签中的奇怪字符

如何通过用户ID向用户发送私信

整数->;双取消框,但双->;int不';t开箱.为什么?

保持标题窗格的箭头可见,即使设置为不可折叠

如何以事务方式向ibmmq发送消息

将@Transactional添加到Spring框架中链下的每个方法会产生什么效果?