Android中的Multiset

时间:2016-07-07 08:47:45

标签: java android data-structures

我有一个结构

class A
{
    float key;
    Foo data;
}

我需要维护按key排序的这些结构的数组。在元素中插入和删除元素必须高效(比如O(log n))。 key不保证是唯一的。此外,我需要按排序顺序枚举数组。不需要按索引进行随机访问。

如果我使用的是C ++,我会在这里使用std::multiset

您建议将什么用于Android for Android?

3 个答案:

答案 0 :(得分:2)

您可以使用Guava Multiset来达到您想要的效果。 在Android Studio中,您只需将以下依赖项添加到for /R "G:\Fonts" %%a in ("*.?tf") do ( "D:\Program Files\ImageMagick-7.0.2-Q16\convert.exe" -antialias -pointsize 80 -font "%%a" label:@G:\Fonts\_\label.txt "G:\Fonts\_\__blank.jpg" "G:\Fonts\_\%%~na.jpg" )

build.gradle

然后你只需要申报你班级的compile 'com.google.guava:guava:19.0' ,如下:

Multiset

如果您查看文档,可用的方法应该允许您执行所需的操作。

答案 1 :(得分:1)

您可以查看PriorityQueue课程。将项目推送到优先级队列为O(logn),删除为O(logn)。同样,您可以使用与TreeSet不同的重复项。您不能通过索引遍历索引,但可以按顺序遍历队列。最后,订单当然是分类的!

答案 2 :(得分:0)

您好您可以使用Comparable界面和TreeSet解决您的问题,如下所示

如下所示创建数据结构类

public class YourDataSructure implements Comparable<YourDataSructure> {

    public float key;
    public String data;

    public YourDataSructure(float key,String data) {
        this.key = key;
        this.data = data;
    }

    @Override
    public int compareTo(YourDataSructure o) {
        if(key > o.key)
        {
            return 1;
        }else if(key <= o.key)
        {
            return -1;
        }
        return 0;
    }

}

并使用此代码添加数据

TreeSet<YourDataSructure> treeset = new TreeSet<>();

        treeset.add(new YourDataSructure(34,"test 1"));
        treeset.add(new YourDataSructure(22.11f,"test 2"));
        treeset.add(new YourDataSructure(34.12f,"test 3"));
        treeset.add(new YourDataSructure(11.12f,"test 4"));
        treeset.add(new YourDataSructure(11.1f,"test 5"));
        treeset.add(new YourDataSructure(66.32f,"test 6"));
        treeset.add(new YourDataSructure(69.55f,"test 7"));
        treeset.add(new YourDataSructure(34.43f,"test 8"));
        treeset.add(new YourDataSructure(11f,"test 9"));
        treeset.add(new YourDataSructure(11f,"test 10"));

        treeset.forEach(new Consumer<YourDataSructure>() {
            @Override
            public void accept(YourDataSructure t) {
                System.out.println(t.key + " " + t.data);
            }
        });

适合我的工作

这是w.r.t排序的输出。也允许使用键值和重复键。

11.0 test 10
11.0 test 9
11.1 test 5
11.12 test 4
22.11 test 2
34.0 test 1
34.12 test 3
34.43 test 8
66.32 test 6
69.55 test 7