0

複数のマシンにまたがる巨大なオブジェクトのコンテンツをトラバースするメソッドを作成する必要があり、これを返す必要があります。

  • オブジェクトの構造体の開始インデックス (例: 10 個のピース​​/ブロックがある場合、ピース/ブロック 3-7 を返すことができます)
  • 最初のピース内のオフセット
  • pair < id of each piece, size of each piece >(マップではないI've been clearly told not to use Map or Map.Entry)のリスト/配列

正確な言葉を引用すると、私は戻る必要がありfully-allocated array corresponding to the block rangeます。

Thought #1: 開始インデックスとオフセットは 1 回返されます。

  • 索引
  • オフセット
  • ID
  • サイズ

この配列を返すと、冗長な情報が提供されます。また、すべてのエントリに 8 バイトを追加することは、メモリの膨大な浪費になります。

Thought #2: (id とサイズ) でデータ クラスを作成し、この小さいクラス + インデックスとオフセットの配列を持つ別のクラスを返すことができますが、この場合、データ クラスの存在は v とは思えない値を含むことになります。 . 慎重に。

Thought #3:ペアを返す必要がある場合、人々が配列に頼るということを何度も耳にしました。私はそれを行う方法がわかりませんか?

4

1 に答える 1

2

基本的に、データ構造を作成する必要があります。Java でこれを行うには、クラスを使用する方法が 1 つあります。

最初の考えは間違っています。単一のインデックス、単一のオフセット、および複数のペアを返す必要があります。フィールドのカーディナリティが同じではないため、すべてのフィールドを単一のクラスに入れるのは間違っています。特に、返すペアが0組だったら大変困ります。

あなたの 2 番目の考えは、あなたが返さなければならないものに正確に対応しています。配列の代わりにコレクション (リストまたはセット) を使用することを除いて:

public class Result {
    private int index;
    private int offset;
    private Set<Piece> pieces;

    ...
}

public class Piece {
    private String id;
    private int size;

    ...
}

配列ではなくコレクションを使用する理由Piece[]: トラバーサルの前にピースの数がわからない可能性が高いためです。List または Set には、配列にはない多くの便利なメソッドがあるためです。aSet<Piece>は重複する要素がないことを明確に示しているため、Piece の配列には当てはまりません。

3 番目の考えは、Object[]含む 2 要素 (または、たとえばint[]ID とサイズの両方が type の場合は 2 つの要素の) を使用して、Piece に関する情報を保持することです。intしかし、それは見苦しく判読できません。配列に何が含まれ、どのような順序で、どのような型であるかはまったく明らかではありません。そして、Piece クラスのように便利なメソッドを追加することはできません。

Java はオブジェクト指向言語です。クラスとオブジェクトを使用します。カプセル化を使用します。

于 2013-08-24T16:09:55.563 に答える