gpt4 book ai didi

java - 从按元素值排序的多个 vector 调用函数

转载 作者:行者123 更新时间:2023-11-30 04:19:20 27 4
gpt4 key购买 nike

我有几个不同元素的 vector ,但都扩展了一个具有特定功能的类,例如

Vector<classone> one;
Vector<classtwo> two;
Vector<classthree> three;

而classone、classtwo和classthird扩展了Number,而number有两个功能:

doThing()
getValue()

我想要的是按照从所有 vector 接收到的 getValues 的顺序调用 doThing。

一个廉价的解决方案是将所有 vector 连接到一个 vector 中,按值对其进行排序并迭代调用该函数,但这使我必须创建一个巨大的新 vector ,占用新的内存,并且因为 doThing 将每秒发生 60 次,如果 vector 变大,可能会大材小用,我真的不想创建一个新 vector 只是为了对其进行排序,是否有使用现有 vector 的其他解决方案?

顺便说一句,它是 Java。

最佳答案

如果one , twothree已排序,您可以创建一个自定义迭代器来检查给定列表集当前位置的最小值是什么,然后继续。

应该看起来与此类似(未经测试):

class MultiListIterator {
List<Number>[] lists;
int[] positions;

MultiListIterator(List<Number>... lists) {
this.lists = lists;
positions = new int[lists.length];
}

boolean hasNext() {
for (int i = 0; i < lists.length; i++) {
if (positions[i] < lists[i].length) return true;
}
return false;
}

Number next() {
int bestIndex = -1;
Number bestNumber = null;
for (int i = 0; i < lists.length; i++) {
var p = positions[i];
if (p >= positions[i].length) continue;
Number n = lists[i].get(p);
if (bestNumber == null || n.getValue() < bestNumber.getValue()) {
bestIndex = i;
bestNumer = n;
}
}
if (bestNumber == null) throw new RuntimeException("next() beyond hasNext()");
positions[bestIndex++];
return bestNumber;
}
}

用法:

MultiListIterator mli = new MultiListIterator(one, two, three);
while (mli.hasNext()) {
mli.next().doThing();
}

您可能想让MultiListIterator实现Iterator<Number> .

请注意,Java 已经有一个内置类 Number。当您忘记将其导入到某个地方时,为您的类使用相同的名称可能会导致很多困惑。

关于java - 从按元素值排序的多个 vector 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17509541/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com