Как создать случайный список значений фиксированной длины из заданного диапазона?

Чтобы добавить к другим ответам, реализовав java.io.Serializable, вы получаете возможность «автоматической» сериализации для объектов вашего класса. Нет необходимости реализовывать какую-либо другую логику, она будет работать. Java-среда выполнения использует рефлексию для определения того, как маршалировать и де-маршалировать ваши объекты.

В более ранней версии Java отражение было очень медленным, и поэтому сериализация крупных графиков объектов (например, в клиент-серверных приложениях RMI) было немного проблем с производительностью. Чтобы справиться с этой ситуацией, был предоставлен интерфейс java.io.Externalizable, который похож на java.io.Serializable, но с настраиваемыми механизмами для выполнения функций маршаллинга и развязывания (вам нужно реализовать методы readExternal и writeExternal в вашем классе). Это дает вам возможность обойти узкое место производительности отражения.

В последних версиях Java (начиная с версии 1.3, конечно) производительность отражения намного лучше, чем раньше, и поэтому это гораздо менее проблематично. Я подозреваю, что вам будет трудно получить значимую выгоду от Externalizable с современной JVM.

Кроме того, встроенный механизм сериализации Java не является единственным, вы можете получить сторонние замены, такие как JBoss Serialization, что значительно быстрее и является заменой для замены default.

Большой недостаток Externalizable заключается в том, что вы должны сами поддерживать эту логику - если вы добавляете, удаляете или изменяете поле в своем классе, вы должны изменить свой writeExternal / readExternal методы для его учета.

Таким образом, Externalizable является реликвией Java 1.1 дней. В этом нет необходимости.

23
задан nbro 11 May 2017 в 19:26
поделиться

2 ответа

Подобная случайная выборка возвращает список уникальных элементов последовательности. Не путайте это со случайными целыми числами в диапазоне.

>>> import random
>>> random.sample(range(30), 4)
[3, 1, 21, 19]
51
ответ дан 29 November 2019 в 01:04
поделиться

Подойдет комбинация random.randrange и понимание списка.

import random
[random.randrange(1, 10) for _ in range(0, 4)]
13
ответ дан 29 November 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: