【发布时间】:2011-01-24 00:45:55
【问题描述】:
哪个类最适合非有序对列表?我将使用一堆 (float,short) 对,并且需要能够执行简单的数学运算(例如将它们相乘以返回单个浮点数等)。 List 只接受一个参数,而 HashMap 不允许重复(据我所知)。有什么想法吗?
【问题讨论】:
哪个类最适合非有序对列表?我将使用一堆 (float,short) 对,并且需要能够执行简单的数学运算(例如将它们相乘以返回单个浮点数等)。 List 只接受一个参数,而 HashMap 不允许重复(据我所知)。有什么想法吗?
【问题讨论】:
您可以使用HashMap 使用的Entry<U,V> 类,但您会被getKey 和getValue 的语义卡住:
List<Entry<Float,Short>> pairList = //...
我的偏好是创建自己的简单Pair 类:
public class Pair<L,R> {
private L l;
private R r;
public Pair(L l, R r){
this.l = l;
this.r = r;
}
public L getL(){ return l; }
public R getR(){ return r; }
public void setL(L l){ this.l = l; }
public void setR(R r){ this.r = r; }
}
然后当然使用这个新类创建一个List,例如:
List<Pair<Float,Short>> pairList = new ArrayList<Pair<Float,Short>>();
您也可以始终将Lists 设为Lists,但很难强制调整大小(您只有对),并且与数组一样,您需要具有一致的输入。
【讨论】:
List 是一个接口,所以你需要一个实现,比如ArrayList 或LinkedList。
Pair 不可变。
类似于 Mark E 提出的建议,但如果您不介意依赖 3rd 方库,则无需重新创建轮子。
Apache Commons 已经定义了元组:
org.apache.commons.lang3.tuple.Pair<L,R>
Apache Commons 是如此普遍,无论如何,我通常已经在我的项目中拥有它。 https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
【讨论】:
使用自定义类实例列表。自定义类是某种 Pair 或 Coordinate 或其他。那么就
List<Coordinate> = new YourFavoriteListImplHere<Coordinate>()
这种方法的优点是它可以满足“执行简单的数学运算(例如将这对相乘以返回单个浮点数等)”这一要求干净,因为您的自定义类可以包含您需要执行的任何数学运算的方法。 ..
【讨论】:
只是修复了 Mark Elliot 代码中的一些小错误:
public class Pair<L,R> {
private L l;
private R r;
public Pair(L l, R r){
this.l = l;
this.r = r;
}
public L getL(){ return l; }
public R getR(){ return r; }
public void setL(L l){ this.l = l; }
public void setR(R r){ this.r = r; }
}
【讨论】:
听起来您需要创建自己的配对类(请参阅discussion here)。然后列出您创建的该对类的列表
【讨论】:
与 Mark E 的建议类似,您必须提出自己的建议。只是为了对您有所帮助,有一篇简洁的文章 http://gleichmann.wordpress.com/2008/01/15/building-your-own-literals-in-java-tuples-and-maps/ 为您提供了一种非常简洁的方法来创建您可能需要考虑的元组和映射。
【讨论】:
如果你想要多重性,你可以把它放在映射对到数量的映射中。 这样只会有一对给定的值,但它可以表示多次出现。
那么如果你有很多repeatet值并且想要对所有值执行一些操作,你可以节省很多计算。
【讨论】: