XML-комментарии могут пойти куда-нибудь?

В случае ArrayList: remove (int index) - если (индекс - позиция последнего элемента), он избегает без System.arraycopy() и не занимает времени для этого.

Время arraycopy увеличивается, если (индекс уменьшается), кстати, элементы списка также уменьшаются!

лучший эффективный способ удаления - удаление его элементов в порядке убывания: while(list.size()>0)list.remove(list.size()-1); // принимает O (1) while(list.size()>0)list.remove(0); // принимает O (факториал ( n))

//region prepare data
ArrayList<Integer> ints = new ArrayList<Integer>();
ArrayList<Integer> toRemove = new ArrayList<Integer>();
Random rdm = new Random();
long millis;
for (int i = 0; i < 100000; i++) {
    Integer integer = rdm.nextInt();
    ints.add(integer);
}
ArrayList<Integer> intsForIndex = new ArrayList<Integer>(ints);
ArrayList<Integer> intsDescIndex = new ArrayList<Integer>(ints);
ArrayList<Integer> intsIterator = new ArrayList<Integer>(ints);
//endregion

// region for index
millis = System.currentTimeMillis();
for (int i = 0; i < intsForIndex.size(); i++) 
   if (intsForIndex.get(i) % 2 == 0) intsForIndex.remove(i--);
System.out.println(System.currentTimeMillis() - millis);
// endregion

// region for index desc
millis = System.currentTimeMillis();
for (int i = intsDescIndex.size() - 1; i >= 0; i--) 
   if (intsDescIndex.get(i) % 2 == 0) intsDescIndex.remove(i);
System.out.println(System.currentTimeMillis() - millis);
//endregion

// region iterator
millis = System.currentTimeMillis();
for (Iterator<Integer> iterator = intsIterator.iterator(); iterator.hasNext(); )
    if (iterator.next() % 2 == 0) iterator.remove();
System.out.println(System.currentTimeMillis() - millis);
//endregion
  • для индексной петли: 1090 мс
  • для индекса desc: 519 мсек --- лучший
  • для итератора: 1043 мсек
14
задан Community 23 May 2017 в 10:29
поделиться

4 ответа

Согласно спецификация XML , правильно построенный XML-документ:

document ::= prolog element Misc*

то, где prolog

prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?

и Misc,

Misc ::= Comment | PI | S

и

XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

, что означает, что, если Вы хотите иметь комментарии наверху, у Вас не может быть описания типа XML.

у Вас могут, однако, быть комментарии после объявления и вне элемента документа, или наверху или нижняя часть документа, потому что Misc* может содержать комментарии.

спецификация соглашается с Википедией на комментариях:

2.5 Комментария

[Определение: Комментарии могут появиться где угодно в документе вне другой разметки; кроме того, они могут появиться в объявлении типа документа в местах, позволенных грамматикой. Они не часть символьных данных документа; процессор XML, но нуждаются не, МОЖЕТ позволить приложению получить текст комментариев. Для совместимости строка "-" (двойной дефис) не ДОЛЖНА происходить в рамках комментариев.] Ссылки на сущность параметра не ДОЛЖНЫ быть распознаны в рамках комментариев.

Все это вместе означает, что можно поместить комментарии где угодно, это не в другой разметке , за исключением того, что у Вас не может быть определения XML, если Вы ведете с комментарием .

Однако, в то время как в теории теория соглашается с практикой, на практике это не делает, таким образом, мне было бы любопытно видеть, как Ваш эксперимент удается.

13
ответ дан 1 December 2019 в 13:22
поделиться

Первым примером не является допустимый XML, объявление должно быть первой вещью в XML-документе.

, Но помимо которого, комментарии могут пойти куда-либо еще.

Исправление Вашего первого примера:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Queries used: ... -->
<dataset>
</dataset>
3
ответ дан 1 December 2019 в 13:22
поделиться

Инструкция по обработке должна быть самой первой вещью в содержании XML (см. XML-комментарий и обрабатывать инструкции ). Следующее должно работать:

<?xml version='1.0' encoding='UTF-8'?>
<!-- Queries used: ... -->
<dataset>
  ...
</dataset>
2
ответ дан 1 December 2019 в 13:22
поделиться

Спасибо за ответы все!

Как оказалось, комментарий перед файлом, казалось, работал, но когда я копался в источнике DBUnit, это - потому что проверка выключена.

я действительно пробовал простую загрузку документа через:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("/path/to/file"));

и это перестало работать за исключением, потому что определение XML не является первой вещью (поскольку обозначенные другие имели бы место).

Так, в то время как DBUnit работал бы, я предпочитаю иметь допустимый XML, таким образом, я переместил комментарий до конца (так как DBUnit генерирует определение XML, это не опция поместить комментарий ниже его, даже при том, что я предпочел бы, чтобы..., по крайней мере, не изменяя XML после того, как факт, который будет большим количеством работы, чем он, стоил).

1
ответ дан 1 December 2019 в 13:22
поделиться
Другие вопросы по тегам:

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