2015-01-17 3 views
0

Итак, я пытаюсь сохранить 5 атрибутов объекта, которые представляют собой 5 разных целых чисел.Самый эффективный способ хранения 5 атрибутов

Что было бы лучшим способом их хранения? Я думал о массивах, но массивы не являются гибкими. Я также должен иметь возможность извлекать все 5 атрибутов, поэтому массивы, вероятно, не будут работать хорошо.

Вот какой-то фон, если это помогает: в настоящее время я делаю игру похожей на Terraria (или Minecraft в 2D). Я хотел сохранить, где объект находится на map(x,y), где он находится на экране в части map(x,y), и какой тип объекта он есть.

+4

Что случилось с переменными экземпляра? – ajb

+0

Если вы устраняете массивы b/c, они не являются «гибкими», тогда вам, вероятно, потребуется более конкретная информация о том, как вы оцениваете наиболее эффективное решение. – PaulR

+0

@PaulR привет, возможно, благодаря аккуратности, расширяемости и количеству переменных, которые мне понадобятся. – Conanap

ответ

0

Я бы предложил HashMap, где ключ может быть objectId-attributeName, а значение будет integer значение, так как вам нужно выполнить поиск на основе ключа. Это будет O(1) операции

+0

О, это звучит хорошо! точно, что им нужно. какой класс это? – Conanap

3
import java.awt.Point 

public class MyClass { 
    private Point pointOnMap; 
    private Point pointOnScreen; 
    // ... 
} 

Point класса связывает е & значения Y в один объект (который имеет смысл) и дает полезные, основные методы, это звучит, как вам нужно, например, translate и distance. http://docs.oracle.com/javase/7/docs/api/java/awt/Point.html

+1

Я бы добавил перечисление для типа объекта. –

1

Невозможно предсказать, что является наиболее эффективным способом хранения атрибутов, не видя всего вашего кода. (И я никому не хочу :-)) Во-вторых, вы не ясно объяснили, для чего вы оптимизируете. Скорость? Использование памяти? Минимизация GC-пауз?

Однако этот запах преждевременной оптимизации. Отмахиваясь от потери времени, пытаясь оптимизировать производительность над чем-то, что еще не было построено, и без каких-либо доказательств того, что производительность этой части будет существенной.

Мой совет:

  1. Выберите простой дизайн и реализовать его; например 5 private int переменные с геттерами и сеттерами. Если это неудобно, выберите более удобный API.

  2. Завершите программу.

  3. Получите его работу.

  4. Бенчмарк. Он работает достаточно быстро? Если да, остановитесь.

  5. Профиль. Выберите самую высокую точку доступа и оптимизируйте ее.

  6. Повторите бенчмаркинг и профиль, чтобы проверить, что ваша оптимизация сделала вещи быстрее. Если «да», то «совершить» это. Если нет, верните его.

  7. Перейти к шагу 4.

+0

Привет! на самом деле я пытаюсь сделать его эффективным, так как при организации и кодировании =) проблема с int заключается в том, что, поскольку мы можем создать бесконечное количество объектов в нашей игре, будет беспорядочный беспорядок ints, и поскольку мы не можем использовать переменную для определения имени int (например, int a + b blah blah blah, когда a и b являются переменными, а имя должно быть ab). Тогда у нас возникнет проблема с попыткой определить, какая переменная для каждого элемента – Conanap

Смежные вопросы