哪个类对于非有序的对列表最有效?我将采用一堆(浮动,短)对,并且需要能够执行简单的数学运算(比如将这些对相乘以返回单个浮点数等)。 List只接受一个参数,而HashMap不允许重复(据我所知)。有什么想法吗?
答案 0 :(得分:40)
您可以使用Entry<U,V>
使用的HashMap
课程,但您会被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>>();
您也可以随时生成List
个List
s,但是执行大小调整变得很困难(您只有对)并且您需要像数组那样保持一致打字。
答案 1 :(得分:11)
使用自定义类实例列表。自定义类是某种配对或坐标或其他什么。然后只是
List<Coordinate> = new YourFavoriteListImplHere<Coordinate>()
这种方法的优点在于它满足了这个要求“执行简单的数学运算(比如将这些对相乘以返回单个浮点数等)”干净,因为你的自定义类可以有你需要做的任何数学方法。 ..
答案 2 :(得分:4)
只是修正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; }
}
答案 3 :(得分:2)
类似于Mark E的建议,但是如果您不介意依靠第三方的库,则无需重新创建轮子。
Apache Commons已经定义了元组:
org.apache.commons.lang3.tuple.Pair<L,R>
Apache Commons非常普及,无论如何我通常已经在我的项目中使用了它。 https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
答案 4 :(得分:1)
听起来你需要创建自己的配对类(参见discussion here)。然后创建您创建的对类的列表
答案 5 :(得分:0)
与Mark E提出的相似,你必须提出自己的想法。只是为了帮助你一点,有一篇简洁的文章http://gleichmann.wordpress.com/2008/01/15/building-your-own-literals-in-java-tuples-and-maps/,它为你提供了一个非常巧妙的方法来创建你可能想要考虑的元组和地图。
答案 6 :(得分:0)
如果您想要多重性,可以将其放在映射对映射到ammount的映射中。 这种方式只有一对给定值,但它可以代表多次出现。
然后,如果你有很多重复值并想对所有值执行某些操作,你可以节省大量的计算。