Which class would work best for a non-ordered list of pairs? I'll be taking a bunch of (float,short) pairs and will need to be able to perform simple math (like multiplying the pair together to return a single float, etc). List only takes one argument, and HashMap won't allow duplicates (as far as I know). Any thoughts?
问题:
回答1:
You can use the Entry<U,V>
class that HashMap
uses but you'll be stuck with its semantics of getKey
and getValue
:
List<Entry<Float,Short>> pairList = //...
My preference would be to create your own simple Pair
class:
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; }
}
Then of course make a List
using this new class, e.g.:
List<Pair<Float,Short>> pairList = new ArrayList<Pair<Float,Short>>();
You can also always make a List
s of List
s, but it becomes difficult to enforce sizing (that you have only pairs) and you would be required, as with arrays, to have consistent typing.
回答2:
Use a List of custom class instances. The custom class is some sort of Pair or Coordinate or whatever. Then just
List<Coordinate> = new YourFavoriteListImplHere<Coordinate>()
This approach has the advantage that it makes satisfying this requirement "perform simple math (like multiplying the pair together to return a single float, etc)" clean, because your custom class can have methods for whatever maths you need to do...
回答3:
just fixing some small mistakes in Mark Elliot's code:
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; }
}
回答4:
Sounds like you need to create your own pair class (see discussion here). Then make a List of that pair class you created
回答5:
Similar to what Mark E has proposed, you have to come up with your own. Just to help you a bit, there is a neat article http://gleichmann.wordpress.com/2008/01/15/building-your-own-literals-in-java-tuples-and-maps/ which gives you a really neat way of creating tuples and maps that might be something you might want to consider.
回答6:
If you want multiplicities, you can put it in map that maps pair to ammount. This way there will only be one pair of given values, but it can represent multiple occurances.
Then if you have lot of repeatet values and want to perform some operation on all values, you can save lot of computations.