在java中创建对列表

在java中创建对列表,java,list,Java,List,哪一类最适合于非有序的成对列表?我将使用一组(float,short)对,并且需要能够执行简单的数学运算(比如将对相乘以返回单个float,等等)。列表只接受一个参数,HashMap不允许重复(据我所知)。有什么想法吗?您可以使用HashMap使用的Entry类,但它的语义是getKey和getValue: List<Entry<Float,Short>> pairList = //... 然后当然要使用这个新类制作一个列表,例如: List<Pair<Fl

哪一类最适合于非有序的成对列表?我将使用一组(float,short)对,并且需要能够执行简单的数学运算(比如将对相乘以返回单个float,等等)。列表只接受一个参数,HashMap不允许重复(据我所知)。有什么想法吗?

您可以使用
HashMap
使用的
Entry
类,但它的语义是
getKey
getValue

List<Entry<Float,Short>> pairList = //...
然后当然要使用这个新类制作一个
列表
,例如:

List<Pair<Float,Short>> pairList = new ArrayList<Pair<Float,Short>>();
List pairList=new ArrayList();

您也可以始终创建一个
列表
s的
列表
s,但是很难强制调整大小(因为您只有对),并且您需要像数组一样具有一致的键入。

使用自定义类实例列表。自定义类是某种类型的Pair或Coordinate或其他类型。那就

List<Coordinate> = new YourFavoriteListImplHere<Coordinate>()
List=newYourFavoriteListImplhere()

这种方法的优点是,它使满足这一要求“执行简单的数学运算(如将对相乘以返回单个浮点等)”变得干净,因为您的自定义类可以为您需要执行的任何数学运算提供方法…

听起来您需要创建自己的对类(请参阅)。然后列出你创建的结对类,类似于Mark E的建议,你必须提出自己的结对类。为了帮助你一点,有一个整洁的文章,给你一个真正整洁的方式来创建元组和地图,这可能是你可能要考虑的事情。

< P>如果你想要多重性,你可以把它放在地图上,映射成一对一。 这样,将只有一对给定值,但它可以表示多个事件


然后,如果您有很多repeatet值,并且希望对所有值执行一些操作,则可以节省大量计算。

只需修复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; }
}
公共类对{
私人L;
私人住宅;
公共对(左,右){
这个。l=l;
这个。r=r;
}
public L getL(){return L;}
公共R getR(){return R;}
public void setL(L){this.L=L;}
public void setR(rr){this.R=R;}
}

与Mark E的建议类似,但如果您不介意依赖第三方LIB,则无需重新创建控制盘

Apache Commons已经定义了元组:

org.apache.commons.lang3.tuple.Pair<L,R>
org.apache.commons.lang3.tuple.Pair
ApacheCommons非常普及,我通常已经在我的项目中使用了它。

但我肯定只需要创建占位符类,然后将其实例添加到列表中——直言不讳……假设我不需要新类就可以做到这一点。我正在考虑只运行两个适当类型的列表。为什么我这样做时它会抱怨:private List floatList=new List();但当我不使用赋值运算符,而只使用私有列表floatList?它仍然需要实例化,不是吗?@V1rtua1An0ma1y:因为
List
是一个接口,所以需要一个实现,比如说
ArrayList
LinkedList
。在getL()和getR()中,代码中有一个小的打字错误,它应该是“return l;”和“return r;”,而不是“return l;”和“return r;”r;”。您可能还希望使
不可变。这在9年前不起作用,但现在起作用了。
org.apache.commons.lang3.tuple.Pair<L,R>