我有一个结构
class A
{
float key;
Foo data;
}
我需要维护按key
排序的这些结构的数组。在元素中插入和删除元素必须高效(比如O(log n)
)。 key
不保证是唯一的。此外,我需要按排序顺序枚举数组。不需要按索引进行随机访问。
如果我使用的是C ++,我会在这里使用std::multiset
。
您建议将什么用于Android for Android?
答案 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