首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类似索引集合的表筛选

类似索引集合的表筛选
EN

Stack Overflow用户
提问于 2012-05-07 14:00:13
回答 1查看 158关注 0票数 0

我需要一个简单的索引搜索结构的数据库。它将在applet中使用,所以我不想使用额外的嵌入式数据库jar。

总结:我试着用类比来解释。例如,一个学生表:

代码语言:javascript
复制
Students
------------------
Score
Gender
Name

我想筛选我发现的SCORE > 40 AND SCORE < 80 AND GENDER = MALE解决方案进行全表扫描。但我正在寻找像TreeMap这样的解决方案。

我做了一个简单的解决方案,比如使用TreeMap进行分区。

代码语言:javascript
复制
package multikey;

import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;


public class MultiKey {




    public MultiKey() {

        final Integer MALE   = 1;
        final Integer FEMALE = 2;

        List<Student>                                    students = new ArrayList<Student>();
        TreeMap<Integer, TreeMap<Integer, List<String>>> table;

        students.add(new Student(80, MALE, "John"));
        students.add(new Student(80, FEMALE, "Monica"));
        students.add(new Student(70, MALE, "Michael"));
        students.add(new Student(60, MALE, "Brad"));
        students.add(new Student(60, FEMALE, "Angelina"));
        students.add(new Student(50, MALE, "Steve"));
        students.add(new Student(40, MALE, "Alex"));

        table = new TreeMap<Integer, TreeMap<Integer, List<String>>>();

        for (Student student : students) {
            Integer                        score     = student.score;
            Integer                        gender    = student.gender;
            TreeMap<Integer, List<String>> genderMap;
            List<String>                   names;

            if ((genderMap = table.get(score)) == null) {
                genderMap = new TreeMap<Integer, List<String>>();
                table.put(score, genderMap);
            }

            if ((names = genderMap.get(gender)) == null) {
                names = new ArrayList<String>();
                genderMap.put(gender, names);
            }

            names.add(student.name);
        }

        // 50 - 70 arasında alan erkekler
        SortedMap<Integer, TreeMap<Integer, List<String>>> students5070 = table.subMap(50, 71);
        List<String>                                       filtered     = new ArrayList<String>();

        for (Integer score : students5070.keySet()) {
            filtered.addAll(students5070.get(score).get(MALE));
        }

        System.out.println(filtered);
    }



    public static void main(String[] args) {

        new MultiKey();
    }




    public class Student {




        private int    gender;
        private String name;
        private int    score;




        public Student(int score, int gender, String name) {

            this.score  = score;
            this.gender = gender;
            this.name   = name;
        }




        public int getGender() {

            return gender;
        }



        public String getName() {

            return name;
        }




        public int getScore() {

            return score;
        }




        @Override
        public String toString() {

            return name;
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2012-05-07 14:21:54

如果您只需要一个表,那么guava tables可能会对您有所帮助,只是作为一个参考。如果您需要更多类似SQL的语法...我认为您无法避免使用像HSQLDB这样的纯hava SQL数据库

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10477354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档