почему такая конструкция не работает
private boolean compressTiles (Tile[] tiles){
Tile [] tileOld = new Tile [0];
System.arraycopy(tiles, 0, tileOld, 0, tiles.length);
Arrays.sort (tiles, (o1, o2) -> {
if (!o1.isEmpty() && o2.isEmpty()) {return -1;}
else return 0;
});
if (Arrays.equals (tiles,tileOld)) {return false;}
else return true;
}
VitalyK #1116124
1 уровень
Подскажите пожалуйста
Архивный
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #2322530
26 февраля 2021, 11:57
ты создаёшь массив из 0 элементов, как ты туда собрался копировать?
некоторые реализации метода Arrays.equals() появился в Java9 если не ошибаюсь.
поэтому аккуратнее с ним.
0
VitalyK #1116124
26 февраля 2021, 12:02
сделал так , валик пропустил. Оставить ? :)
private boolean compressTiles(Tile[] tiles){
List<Tile> tileOld = new LinkedList<>(Arrays.asList(tiles));
Arrays.sort(tiles, (o1, o2)-> {
if(!o1.isEmpty() && o2.isEmpty()) {return -1;}
else return 0;
});
boolean a = !Arrays.equals(tiles, new List[]{tileOld});
return a;
}
0
hidden #2322530
26 февраля 2021, 12:05решение
надо было исправить вот так:
и всё. у тебя System.arraycopy() отработает быстро.
к тому же всё что ты сейчас написал, по факту под капотом вызовет то же самое. только с кучей конвертаций и проверок.
зачем тебе переменная, если ты ей только один раз воспользуешься при return
+2
VitalyK #1116124
26 февраля 2021, 12:11
Спасибо. убеждаюсь простота кода - это большой опыт. :)
+1