java - 不确定我是否应该搜索或排序我的 hashmap

标签 java search sorting hashmap

你好,我有一个人的年龄列表,我需要找到那些超过 30 岁的人, 有没有可能在 HashMap 中搜索? (请注意,我可能还需要寻找其他年龄段的人,因此为了代码简单起见,我不想使用两个不同的列表)

简而言之:我的目标是找到一种在 HashMap 中搜索具有特定值的元素的方法

示例列表是

element1 40
element2 4
element3 66
element4 5

我想找到值大于 40 和值大于等于 66 的那些。

最佳答案

我建议您使用 NavigableMap (作为 TreeSet 实现)。

此实现速度非常快 - O(log(N)),如果您基于列表实现索引则为 O(N)。

编辑。示例:

class PersonsAgeIndex {

    private NavigableMap<Integer, List<Person>> ageToPersons = 
                                    new TreeMap<Integer, List<Person>>();

    public void addPerson( Person p ) {
        List<Person> personsWithSameAge = this.ageToPersons.get( p.age );

        if ( personsWithSameAge == null ) {
            personsWithSameAge = new LinkedList<Person>();
            this.ageToPersons.put( p.age, personsWithSameAge );
        }

        personsWithSameAge.add( p );
    }

    public List<Person> personsWithAgeLessThan( int age ) {
        List<Person> persons = new LinkedList<Person>();

        // persons with less age
        for (List<Person> tmp : this.ageToPersons.headMap( age ).values()) {
            persons.addAll( tmp );
        }

        return persons;
    }

    public List<Person> personsWithAgeInInterval( int minAge, int maxAge ) {
        List<Person> persons = new LinkedList<Person>();

        // persons with age, which: (minAge <= age <= maxAge)
        for (List<Person> tmp : this.ageToPersons.subMap( minAge, true, maxAge, true ).values()) {
            persons.addAll( tmp );
        }

        return persons;
    }

}

class Person {
    public final int age;

    public Person(int age) {
        this.age = age;
    }
}

关于java - 不确定我是否应该搜索或排序我的 hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12707769/

相关文章:

java - 将 EBNF 文法转换为上下文无关文法

search - 设置Solr或ElasticSearch需要什么技能?

java - 在ArrayList上实现降序快速排序

macos - 以编程方式对 NSTableView 进行排序

java - 即使 JAR 包含在 list 类路径中,也会出现 NoClassDefFoundError

java - 如何在 Java 中同步未同步的集合

java - 如何在edittext上显示 double 值 - android

html - 从用作图标的重叠背景图像中停止占位符/输入文本?

search - 如何仅在 vscode 中当前打开的文件中搜索?

java - 旋转有序数组搜索