Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Разработка плагинов для новичков' started by CoolBoy, Feb 4, 2017.

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

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    А вот тут без понятия. Equals хеш код обьектов сравнивает. У одинаковых обьектов - одинаковый хешкод. Мало того, насколько я знаю, метод equals у Player переопределён.
     
  2. Хостинг MineCraft
    <
  3. Reality_SC

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    46
    Спасибо за внятное объяснение.
     
  7. Sonicxd2

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

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

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
  9. Автор темы
    CoolBoy

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Thanks :)

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

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

    alexandrage Администратор

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

Share This Page