4

使用 Point (x, y) 对象的常见示例,有没有办法将它作为 Java 1.4 中的结构?优点是不会为 Point 对象分配单独的内存,因为结构将是包含对象的一部分。但它仍然有成员函数来访问它。

我有 98% 的把握答案是否定的,但希望永远存在……

什么/为什么:在我们的代码中,我们有 100,000 多个对象(大约占总内存占用的 12-14%),它们是一个 int 和一个布尔值。如果这是对象内部的 C# 结构,它将减少对象的数量。而且...我们正在考虑将其设置为 int,其中 0x40000000 是布尔值。但是,如果我们有该 int 的成员方法并将其视为结构,则处理起来会容易得多。

4

3 回答 3

2

现在 Java 上没有 struct 等价物,尽管我相信它们已被暗示用于未来的版本。仍然看看享元模式,可能是你正在寻找的http://en.wikipedia.org/wiki/Flyweight_pattern

于 2012-06-22T22:22:32.693 回答
1

No, you have to use Objects for general "structs".

However for simple data structures like pairs of ints, you can use a bit of trickery in order to save memory and increase speed.

int a = 9;
int b = 10;
long pair = (a << 32)|b;

This packs the 32 bits of a and b into a long. Here's how you extract them:

a = (int)(pair >> 32);
b = (int)pair;
于 2012-06-22T22:18:43.390 回答
1

tkuzzy 的答案的补充:另一种可能性是将int xint y字段从Point类提升到任何需要存储点值的类中。

根据评论进行编辑:

您可以做的一件事是让每个需要存储单点值的类扩展一个Point类。Point不存在逻辑上的 is-a 关系,但它使您可以通过单个接口访问对象。不过,这对于任何需要存储多个点值的类都不起作用(我不认为)。

于 2012-06-22T22:21:26.070 回答