В случае 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
Согласно спецификация 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, если Вы ведете с комментарием .
Однако, в то время как в теории теория соглашается с практикой, на практике это не делает, таким образом, мне было бы любопытно видеть, как Ваш эксперимент удается.
Первым примером не является допустимый XML, объявление должно быть первой вещью в XML-документе.
, Но помимо которого, комментарии могут пойти куда-либо еще.
Исправление Вашего первого примера:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Queries used: ... -->
<dataset>
</dataset>
Инструкция по обработке должна быть самой первой вещью в содержании XML (см. XML-комментарий и обрабатывать инструкции ). Следующее должно работать:
<?xml version='1.0' encoding='UTF-8'?>
<!-- Queries used: ... -->
<dataset>
...
</dataset>
Спасибо за ответы все!
Как оказалось, комментарий перед файлом, казалось, работал, но когда я копался в источнике DBUnit, это - потому что проверка выключена.
я действительно пробовал простую загрузку документа через:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("/path/to/file"));
и это перестало работать за исключением, потому что определение XML не является первой вещью (поскольку обозначенные другие имели бы место).
Так, в то время как DBUnit работал бы, я предпочитаю иметь допустимый XML, таким образом, я переместил комментарий до конца (так как DBUnit генерирует определение XML, это не опция поместить комментарий ниже его, даже при том, что я предпочел бы, чтобы..., по крайней мере, не изменяя XML после того, как факт, который будет большим количеством работы, чем он, стоил).