我必须编写一个方法,遍历散布在机器上并需要返回以下内容的庞大对象的内容:
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:起始索引和偏移量将返回一次,这是创建一个类的选项
返回一个数组将提供多余的信息,每个条目增加8个字节,这是对内存的巨大浪费。
Thought #2:我可以用(id和size)创建一个数据类,并返回另一个类,其中包含这个较小的类+ index &偏移量的数组,但是在这种情况下,我的数据类的存在将仅仅包含一些似乎不谨慎的值。
Thought #3:我多次听说人们在需要返回对时使用数组。我不知道怎么做?
发布于 2013-08-24 16:09:55
基本上,你必须创建一个数据结构。在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[]数组:因为在遍历之前很有可能不知道碎片的数量。因为一个列表或集合有许多数组没有的有用方法。因为Set<Piece>清楚地指出没有重复的元素,这不是一个片段数组的情况。
第三个想法是使用一个包含2个元素的Object[] (或者一个包含两个元素的int[],例如,ID和大小都是int类型)来保存关于一个片段的信息。但这是丑陋和不可读的:数组包含的内容、顺序以及它们的类型都不明显。你不能添加任何有用的方法,就像你可以用一个片段类。
Java是一种面向对象语言。使用类和对象。使用封装。
https://stackoverflow.com/questions/18420330
复制相似问题