LINUX.ORG.RU

Вопрос по Яве.


0

1

Есть веб чат, и есть метод класса Чат возвращающий последние записи. Записи хранятся в виде очереди первым пришел - первым вышел. Нужно вернуть последние записи в чате (при ajax запросе от веб-страницы). При этом есть проверка на древность и самые древние записи из списка записей убираются. Это предыстория, а теперь собственно вопрос. Нормально ли возвращать В данном методе массив? Как это в плане производительности и прочих соображений? Или вернуть List? Или просто почистить коллекцию от древних записей и вернуть в вызывающий код итератор? Вызывающий код перегоняет объекты ChatRecord в json и отдает клиенту. Подскажите плиз ))

public ChatRecord[] getTail( int tailSize ) {
	long time = System.currentTimeMillis();		
	ChatRecord[] ret = new ChatRecord[tailSize];
	ListIterator last = getIterator();
		
	for( int i = 0; i < tailSize; ++i ) {		
		if( !last.hasNext() )
			break;
			
		ChatRecord record = (ChatRecord) last.next();
			
		if( ( time - record.received ) > keepTime )
			last.remove();
		else
		        ret[i] = record;
	}
		
	return ret;
}

★★

На мой взгляд, лучше вернуть список, чем массив, у которого где-то таятся null'ы. ArrayList например внутри базируется на том же массиве, так что вряд ли он будет сильно медленнее.

CARS ★★★★ ()

Лучше использовать Collection API если нет веских поводов не делать этого, там много полезных методов.

Legioner ★★★★★ ()
Ответ на: комментарий от Legioner

просто С++ головного мозга и кажется что этот код неэффективен

mio ★★ ()

Чистые массивы в яве быстрее, но в этом случае разницы никакой не будет. Можно в этом методе сделать 50 списков и все равно на скорость ощутимо не повлияет. Работа с контейнерами и коллекциями в jvm очень хорошо оптимизирована.

note173 ★★★★★ ()

гда абстракция? Возвращай List or Collection

anonymous ()
Ответ на: комментарий от mio

просто С++ головного мозга и кажется что этот код неэффективен

``Premature optimization is the root of all evil" (c) Donald Knuth

пиши чтобы работало, а будет производительность проседать, найди боттлнек и оптимизируй.

gensym ★★ ()
Ответ на: комментарий от mio

Посмотри исходники ArrayList, там в принципе то же самое, только длина хранится отдельно, ну и будут вызовы функций вместо инструкций обращения по индексу. Вряд ли это будет проблемой, разве что у тебя десятки миллионов этих массивов и не хочется иметь лишних накладных расходов на неиспользуемую служебную информацию. С++ головного мозга это хорошо в нужном месте.

Legioner ★★★★★ ()

Присоединяюсь к использованию списка. Так проще с точки зрения читабельности.

TheKnight ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.