1

我正在尝试存储一个名称和特定视图的相应左、右、上、下尺寸。我尝试使用 hashmap 仅存储(键、值)。请有人告诉我应该使用哪个 Collection 来满足我的要求。

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);
}
4

5 回答 5

5

怎么样Map<YourKeyClass, YourValuesClass>

例如。

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

    // getters and setters
    // ...
}

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

干杯,

于 2012-10-08T11:51:54.360 回答
1

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

于 2012-10-08T11:55:39.653 回答
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>人脸图 =new HashMap<String, Position>();

在你的 for 循环中,

Position facePosition = new Position();

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

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

于 2012-10-08T12:06:40.277 回答
1

我更喜欢制作一个表示维度(三个值)的对象并使用 hashmap key=facename value=faceDimension (your object) 来充实面向对象编程的概念;)

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;
    }
}
于 2012-10-08T11:54:31.940 回答
0

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

是的,但那value可以是任何类型的权利?所以,在你的 .. 中使用 aList作为一个值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..
}

现在,将 aHashMap<Integer, MyDimension>MyDimension存储所有 4 个值的对象一起使用。

于 2012-10-08T11:51:07.017 回答