2016-05-08 11 views
0

Знаете ли вы, как динамически увеличивать размер массива с новыми элементами, и каждый новый элемент находится в верхней части массива в Java?Как увеличить размер массива и добавить каждый новый элемент в верхней части массива?

Я имею эту Java сниппет:

List<String> dbsuggestions = new ArrayList<String>(); 
    ...some for loop here 



    String correctedText = correctMedicalAcronym(ac, classify, c); 

    if(correctedText != null){ 
     System.out.println(correctedText); 
     dbsuggestions.add(0, correctedText); 
    } 

    ...end of the for loop 
+1

'ArrayList' заботится об увеличении размера массива динамически. Вам не о чем беспокоиться. –

+0

@GautamSavaliya да, но если ему нужно добавлять каждый раз, когда элемент лучше использовать связанный список ... – granmirupa

+0

, если вы хотите добавить элемент сверху (так что новый элемент будет первым элементом), возможно, вам стоит подумать об использовании стека. Используйте пакет [ArrayDeque] (https://docs.oracle.com/javase/7/docs/api/java/util/ArrayDeque.html) для реализации стека. –

ответ

1

Знаете ли вы, как динамически увеличивать размер массива с новыми элементами , и каждый новый элемент входит в верхнюю часть массива в Java?

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

Это договор Stack поставить каждый элемент на верхней части и удалить каждый элемент из верхних , Пример:

 Stack<String> stackDemo = new Stack<>(); 
     stackDemo.push("First"); 
     stackDemo.push("Second"); 
     stackDemo.push("Third"); 
     System.out.println(stackDemo.pop()); // will return Third 
1

Вы знаете, как увеличить динамически размер массива с новыми элементов, и каждый новый элемент выходит на верхней части массива в Java?

Возможно, вам не нужен массив. Попробуйте посмотреть списки.

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

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


Должен ли я использовать LinkedList или ArrayList. Это зависит от того, что вам нужно:

Для LinkedList<E>

  • get(int index) О (п)
  • add(E element) является O (1)
  • add(int index, E element) О (п)
  • remove(int index) является O (n) --- remove(0) is O (1)
  • Iterator.remove() O (1) < --- основное преимущество LinkedList
  • ListIterator.add(E element) представляет собой О (1) < --- Основное преимущество LinkedList

Для ArrayList<E>

  • get(int index) представляет собой О (1) < --- Основное преимущество ArrayList
  • add(E element) O (1) амортизируется, но O (n) наихудший, так как массив должен быть изменен и скопирован
  • add(int index, E element) - O (n - индекс), амортизированный, но O (n) наихудший (как указано выше)
  • remove(int index) - O (n - индекс) (т. удаление последнего O (1))
  • Iterator.remove() является O (п - индекс)
  • ListIterator.add(E element) О (п - индекс)

Так что выбирайте вашу структуру тщательно!

+1

ArrayList - это список, реализованный с помощью массива, поэтому он также статичен. Вы должны использовать LinkedList – granmirupa

+0

@granmirupa, что является бессмысленным. ArrayList использует массив, но размер может измениться. Вы не должны использовать LinkedList, если нет особых причин. – matt

+0

@matt да размер может измениться .. Но вы думаете, что изменение размера стоит O (1) ??? Стратегии использования ArrayList для амортизации - это затраты при добавлении новых элементов. Но он никогда не будет O (1) иначе, чем LinkedList. Если вам нужно сделать много вложений, я намекаю LinkedList. – granmirupa