0

I have to write a method that traverses a huge object's contents which are spread across machines and need to return this:

  • starting index in the object's struct(ex: if it has 10 pieces/blocks I can return piece/block 3-7)
  • offset within the first piece
  • list/array of pair < id of each piece, size of each piece > (not map - I've been clearly told not to use Map or Map.Entry)

Quoting exact words, I'm required to return fully-allocated array corresponding to the block range.

Thought #1: The starting index and offset are to be returned once, the option to create a class with

  • index
  • offset
  • id
  • size

and returning an array of this will be providing redundant information plus, adding 8 bytes every entry is huge waste of memory.

Thought #2: I could create a data class with (id and size) and return another class with array of this smaller class + index & offset, but in this case the existence of my data class will be just to contain values which doesn't seem v. prudent.

Thought #3:I've heard multiple times that people resort to arrays when need to return pairs. I don't know how to do that?

4

1 回答 1

2

基本上,您必须创建一个数据结构。在 Java 中有一种方法可以做到这一点:使用类。

您的第一个想法是错误的:您必须返回一个索引、一个偏移量和多个对。因此将所有字段放在一个类中是错误的,因为字段的基数不同。特别是如果有0对要返回,你会很尴尬。

你的第二个想法正好映射到你必须返回的东西。除了我会使用集合(列表或集合)而不是数组:

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 数组则不是这样。

第三个想法在于使用Object[]包含 2 个元素(或int[]两个元素中的一个,例如,如果 ID 和大小都是 type int)来保存有关 Piece 的信息。但这是丑陋且不可读的:数组包含什么、以什么顺序以及它们的类型是什么并不明显。而且你不能像使用 Piece 类那样添加任何有用的方法。

Java 是一种面向对象的语言。使用类和对象。使用封装。

于 2013-08-24T16:09:55.563 回答