Блог пользователя MikeMirzayanov

Автор MikeMirzayanov, 11 лет назад, По-русски

Всего пару дней назад вышла восьмая версия Java, которая привносит много нового в язык. Кроме того, даже если не использовать новые языковые фишки, то, возможно, новая версия порадует вас улучшениями в производительности.

Java 8 (пока 1.8.0) была добавлена на Codeforces с теми же параметрами запуска JVM, как и другие версии Java: java.exe -Xmx512M -Xss64M -DONLINE_JUDGE=true -Duser.language=en -Duser.region=US -Duser.variant=US -jar %s.

В настоящее время поддержка Java 8 осуществляется в тестовом режиме, давайте вместе протестим её на задачах нашего архива.

В качестве примера новых возможностей — код, сортирующий заданный набор строк в порядке лексикографического невозрастания:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            List<String> lines = new ArrayList<>();
            while (scanner.hasNextLine()) {
                lines.add(scanner.nextLine());
            }
            lines.stream().sorted((a, b) -> b.compareTo(a)).forEach(System.out::println);
        }
    }
}
  • Проголосовать: нравится
  • +77
  • Проголосовать: не нравится

»
11 лет назад, # |
  Проголосовать: нравится -53 Проголосовать: не нравится

Thanks, BTW Why don't you add C++11 in languages?

»
11 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

Замечательная новость! Хочется поблагодарить MikeMirzayanov за скорейшее добавление поддержки новой версии. Сам опробовал восьмерку 2-3 месяца назад, оставила только положительные впечатления!

p.s.: говорят, если заменить .stream() на .parallelStream(), то на достаточно больших входных данных будет существенный выигрыш в производительности, постараюсь найти результаты своих тестов (stream vs parallelStream vs Collections.sort) и выложить сюда!

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится -12 Проголосовать: не нравится

    Надо только мерять процессорное время, а не физическое

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

http://codeforces.me/contest/404/submission/6174479 In the above submission I used Arrays.setAll(lists, ArrayList::new), and it caused a MLE. But it was accepted once I replaced setAll with a loop.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +29 Проголосовать: не нравится

    because Arrays.setAll(lists, ArrayList::new) equals to

    for (int i = 0; i < n; ++i) lists[i] = new ArrayList<>(i);
    

    Correct call:

    Arrays.setAll(lists, i -> new ArrayList<>());
    
»
11 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Which new features of JAVA 8 are very useful for our sport programming?

  • »
    »
    11 лет назад, # ^ |
    Rev. 6   Проголосовать: нравится +15 Проголосовать: не нравится

    At Java 8 there is new implementation of HashSet (HashMap) for resisting of attack on they buckets. In some cases it mutate to "table of trees" and from this state it can mutate to "table of linked lists" back :-)

    New string-hashing implementation, improved collision performance for string-valued containers.