Сложный ключ для кэша гуав (смещение)

У меня есть объект точки:

  class Point {
    final int x,y;
    ...
  }

Поскольку эти точки будут использоваться / создаваться повсюду в моем коде, я хочу начать использовать кеш гуавы. К сожалению, CacheLoader принимает только один параметр. Другой вопрос здесь, о stackoverflow, используйте объект пары для аналогичной проблемы. Но мне не нравится идея создавать фиктивный объект для каждого запроса кеша. Поэтому я придумал свой собственный обходной путь:

Поскольку объект определяется x и y, я думаю, что могу объединить (сдвинуть) оба значения в длинное, что будет моим ключом.

void test(int x, int y) {
    Long key = (long) ((long) (x) << Integer.SIZE | y);
    Point point = cache.get(key);
}

CacheLoader loader = new CacheLoader() {
    public Point load(Long key) throws Exception {
    final int x,y;
        // shift magic
        x = (int) (key >> Integer.SIZE);
        y = key.intValue();
        return new Point(x, y);
    }
};

На самом деле я новичок в смену. Это сработает? Я что-то пропустил? Это «быстрее», чем в парном классе? Это мой вопрос!

Да, я тестирую код, и насколько я могу судить, он работает.

8
задан Community 23 May 2017 в 11:46
поделиться