Попробуйте это:
Всякий раз, когда вы добавляете элемент, мы увеличиваем size
(это будет отслеживать количество непустых пространств, так что вам не нужно постоянно пересчитывать массив). Затем мы сравниваем это число с общей длиной вашего массива. Если count не менее 75% от размера массива, мы вызываем ваш метод изменения размера и устанавливаем pq в новый массив, который он возвращает. Я предполагаю, что вы хотите добавить в конец массива и что вам не нужны пустые индексы между числами. Если вам нужны пробелы, вам нужно будет использовать цикл, который я пытаюсь избежать ради эффективности, если это не обязательно. Предполагая, что вы этого не сделали, вы можете просто добавить в свой массив индекс size
, так как это будет первый непустой элемент.
//O(1) efficiency if you don't need to resize, O(n) if you do
public void insert(int number) {
if(size/pq.length >= 75) {
pq = resize();
}
pq[size] = number; //Since this will be the first non-empty index
size++;
return; //Doing it this way, if you can, is much more efficient than looping
}
Если вы звоните удалить и вывезти из ничего, но в конце вы будете иметь, чтобы переместить все вниз, так что у вас нет пустого пространства.
Если у вас есть пустые индексы, попробуйте что-то вроде этого (чтобы вставить в первый пустой индекс, столкнувшись с циклом) ... Давайте вместо этого используем Integer [], чтобы вы могли проверить значение null и надеть ' t нужно беспокоиться о том, что любые 0 в массиве считаются пустыми (int [] инициирует все до 0). Таким образом, мы можем проверить пустое место, а 0 не считаются пустыми, если вы используете их в своем int[]
.
//O(n) efficiency if you don't need to resize, O(n^2) if you do
public void insert(int number) {
if(size/pq.length >= 75) {
pq = resize();
//You would have to make resize return an Integer[] and
//implement this throughout the code
}
for(int i = 0; i < pq.length; i++) {
if(pq[i] == null) {
pq[size] = number;
size++;
return;
}
}
}
Независимо: Помните, когда вы звоните remove()
декрементировать size
.
Вы не можете проверить, если массив полный, потому что он всегда заполнен. Значения, которые не установлены, будут иметь значение по умолчанию. Это значение по умолчанию - это то, что вы должны проверить. – Anton
Что такое прецедент? Почему бы не использовать 'Collection' какого-то типа – redFIVE
Расширение комментария @ redFIVE: Является ли это назначением курса структур данных или аналогичным? Если это для реального программного проекта, а не для структуры данных, то вы должны использовать 'Collection', а не изобретать колесо: такое поведение типа ArrayList уже реализовано в стандартных библиотеках Java. – Laogeodritt