1

1つの名前と、特定のビューの対応する左、右、上、下の寸法を保存しようとしています。ハッシュマップを使用して、その保存のみ(キー、値)を試しました。要件を満たすためにどのコレクションを使用すればよいか教えてください。

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

オブジェクト指向プログラミングの概念を完全に満たすために、次元(3つの値)を表すオブジェクトを作成し、ハッシュマップ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;
    }
}
于 2012-10-08T11:54:31.940 に答える
1

HashMapを使用するのが最善の策だと思います。

于 2012-10-08T11:55:39.653 に答える
1

HashMapを使用することをお勧めしますが、キー (faceName) に対応する 4 つの値があるためです。DTOデータを運ぶための 4 つのプロパティを持つデータ転送オブジェクト ( ) を作成し、次のようにマップに配置します。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 に答える
0

(キー、値)のみを格納するハッシュマップを試してみました

ええ、valueでもそれはどんなタイプでもいいですか?したがって、 ..Listの値としてaを使用します。したがって、複数の値を格納できます。HashMap

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

のタイプをと仮定し値のタイプを..適切なタイプを使用できます。keyIntegerString

または、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..
}

ここで、4つの値すべてを格納するオブジェクトでを使用HashMap<Integer, MyDimension>します。MyDimension

于 2012-10-08T11:51:07.017 に答える