1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Оптимизация

Тема в разделе "Разработка плагинов для новичков", создана пользователем CoolBoy, 4 фев 2017.

  1. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    А вот тут без понятия. Equals хеш код обьектов сравнивает. У одинаковых обьектов - одинаковый хешкод. Мало того, насколько я знаю, метод equals у Player переопределён.
     
  2. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    equals это как минимум обращение в таблицу виртуальных функций (а мы помним, что в Java методы все методы виртуальные), а затем ещё и ряд действий над его полями для вычисления hash. Поскольку логика сервера гарантирует, что у онлайн игрока только один Player, то лучше через ==, чему вообще обращаться по адресу в памяти, где лежат объекты, не нужно.
     
  3. Sonicxd2

    Sonicxd2 Активный участник Пользователь

    Баллы:
    76
    Мне легче сравнивать по имени, чем смотреть заходы и выходы игрока. Ну хотя, кому как ^_^
     
  4. Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    ну смотри, у тебя есть допустим огромнейшая коробка(сервер). в которой лежат камни(игроки) по 10 тонн(вся дата игрока). допустим 50 камней.
    на каждом камне выгравировано его уникальное имя(ссылка, адрес в памяти). теперь тебе тебе подсовывают еще один камушек, снова 10 тонн, и хотят узнать есть ли среди тех 50 аналог тому что тебе дали.

    естественно ты как умный тупо найдешь камушек с таким же именем (проверка по ссылке), однако те кто сунули тебе этот камень хотят что бы ты проверил его по всем параметрам (Equals) и в итоге тебе придется таскать эти камни, прикладывать их друг к дружке и т.д. (тебе же не хочется мурыжить два камня по 10 тонн?). те кто умнее будут проверять например по левой грани (getName().equals) или по правой грани (getUid) ну и т.д. В этом случае тебе придется тягать камни гораздо меньше(что несомненно лучше), но все равно придется.

    делай выводы кароч.

    Все вышенаписанное является моим пониманием ситуации, если где то не прав, то с радостью узнаю где. лучше сейчас чем через npe
     
  5. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    96
    Спасибо за внятное объяснение.
     
  6. Sonicxd2

    Sonicxd2 Активный участник Пользователь

    Баллы:
    76
    В принципе ты прав, насчёт "Оптимизации". Но вызов метода getName() или getUUID() не очень уж и затратно по времени.(Если количество игроков нормальное xD)
     
  7. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
  8. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Thanks :)

    Тему оставлю открытой, пока, ибо название у неё довольно общее, да и обсудили тут не мало.

    Появятся другие вопросы касающиеся этой темы - апну её)
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вызов getName() и getUUID() пройет быстро да. А вот name.equals(name) пойдет проверять каждый байт, Bukkit.getServer().getPlayer(name), начнет собирать массив из игроков и потом уже проверять байты ника. Такие вещи лучше часто не дергать.
     

Поделиться этой страницей