我应该使用哪个集合在java中存储一个键和三个值?

时间:2012-10-08 11:48:17

标签: java collections

我正在尝试存储一个名称以及特定视图的左,右,上,下维度。我尝试使用hashmap,仅存储(键,值)。请有人告诉我应该使用哪个系列来满足我的要求。

for (int i = 0; i < numberOfFaceDetected; i++) {
    android.media.FaceDetector.Face face = myFace[i];
    Log.i("FACE","FACE TAGGING   : "+myFace[i].toString());
    String facename = myFace[i].toString();
    PointF myMidPoint = new PointF();
    face.getMidPoint(myMidPoint);
    myEyesDistance = face.eyesDistance();
    dx = (int) (myMidPoint.x - myEyesDistance);
    dy = (int) (myMidPoint.y - myEyesDistance);
    dz = (int) (myMidPoint.x + myEyesDistance);
    dt = (int) (myMidPoint.y + myEyesDistance);
    //here i want to store facename,dx,dy,dz,dt values in  same  collection
    canvas.drawRect((int) dx, dy, dz, dt, myPaint);
}

5 个答案:

答案 0 :(得分:5)

Map<YourKeyClass, YourValuesClass>怎么样?

例如

class YourValuesClass
{
    int dx, dy, dz, dt;

    // getters and setters
    // ...
}

Map<String,YourValueClass> map = new HashMap<String,YourValueClass>();

干杯,

答案 1 :(得分:1)

我更喜欢制作一个代表尺寸的物体(三个值) 并使用hashmap key = facename value = faceDimension(您的对象) 为了满足面向对象编程的概念;)

public class FaceDimension {
    private int dx;
    private int dy;
    private int dz;
    private int dt;

    public FaceDimension(int dx, int dy, int dz, int dt) {
        super();
        this.dx = dx;
        this.dy = dy;
        this.dz = dz;
        this.dt = dt;
    }
}

答案 2 :(得分:1)

我认为使用HashMap是您最好的选择。

答案 3 :(得分:1)

我建议你使用HashMap,但因为你有4个值对应一个键(faceName)。 创建一个数据传输对象(DTO),其中包含四个属性来传输数据并将其放入地图,例如hashMap.put("myface",myDto);

例如,

class Position
{
    private int left;
    private int right;
    private int top;
    private int bottom;
    public int getLeft() {
        return left;
    }
    public void setLeft(int left) {
        this.left = left;
    }
    public int getRight() {
        return right;
    }
    public void setRight(int right) {
        this.right = right;
    }
    public int getTop() {
        return top;
    }
    public void setTop(int top) {
        this.top = top;
    }
    public int getBottom() {
        return bottom;
    }
    public void setBottom(int bottom) {
        this.bottom = bottom;
    }


}

Map<String, Position> faceMap = new HashMap<String, Position>();

在for循环中,

Position facePosition = new Position();

facePosition.setLeft(((int) (myMidPoint.x - myEyesDistance)));

设置所有属性 然后faceMap.put("myface",facePosition);

答案 4 :(得分:0)

  

我尝试使用hashmap只存储(键,值)

是的,但是value可以是任何类型的吗?因此,在List中使用HashMap作为值。因此,您可以存储多个值..

Map<Integer, List<String>> mapping = new HashMap<Integer, List<String>>();

我<{>>假定类型的keyInteger,值类型为String ..您可以使用合适的类型..

或者,如果您有4-fixed个值,我刚刚看到您 ..您可以创建Custom Type ..只需要一个包含所有这些值的类,并且使用 HashMap<Integer, YourCustomClass>

public class MyDimension {
    private int top; 
    private int bottom;
    private int right;
    private int left;

    // Your Constructor

    // Use only getters, to make the object immutable..
}

现在,使用 HashMap<Integer, MyDimension> MyDimension对象存储所有4个值。