¿Cómo puedo eliminar un elemento de una matriz y luego cambiar el tamaño de la matriz al tamaño más pequeño? Del mismo modo, ¿cómo puedo aumentar la capacidad si necesito agregar otro artículo?Eliminar elemento de la matriz y reducir la matriz
Respuesta
Las matrices tienen un tamaño fijo, no puede cambiar su tamaño después de crearlas. Puede quitar un elemento existente estableciéndolo en null
:
objects[4] = null;
Pero usted no será capaz de eliminar toda esa ranura de la matriz y reducir su tamaño 1.
Si necesita una forma dinámica matriz de tamaño grande, puede usar un ArrayList
. Con él, puede add()
y remove()
objetos, y crecerá y disminuirá según sea necesario.
No se puede cambiar el tamaño de la matriz, por sí mismo, pero puede crear una nueva matriz y eficiente copiar los elementos de la matriz de edad a la nueva matriz mediante alguna función de utilidad como esto:
public static int[] removeElement(int[] original, int element){
int[] n = new int[original.length - 1];
System.arraycopy(original, 0, n, 0, element);
System.arraycopy(original, element+1, n, element, original.length - element-1);
return n;
}
Un Un mejor enfoque, sin embargo, sería usar una ArrayList (o una estructura de Lista similar) para almacenar sus datos y luego usar sus métodos para eliminar elementos según sea necesario.
object[] newarray = new object[oldarray.Length-1];
for(int x=0; x < array.Length; x++)
{
if(!(array[x] == value_of_array_to_delete))
// if(!(x == array_index_to_delete))
{
newarray[x] = oldarray[x];
}
}
No hay manera de reducir el tamaño de un array después de su creación, pero se puede copiar el contenido a otra matriz de un tamaño menor.
¿Qué pasa si solo quiero ignorar el último byte de una matriz de 640 bytes ... – aProgrammer
Entonces su instanciación sería 'object [] new array = new object [oldarray.Length-2];' el ciclo for se ocupa de los incrementos – Mike
Quiero decir ... ¿Necesitamos crear una nueva matriz incluso si solo queremos ignorar un byte ... ¿No podemos reducir la matriz? – aProgrammer
El tamaño de una matriz de Java se soluciona cuando lo asigna y no se puede cambiar.
Si quiere "crecer" o "reducir" una matriz existente, tiene que asignar una nueva matriz del tamaño apropiado y copiar los elementos de la matriz; p.ej. usando
System.arraycopy(...)
oArrays.copyOf(...)
. Un bucle de copia también funciona, aunque parece un poco torpe ... IMO.Si desea "eliminar" un elemento o elementos de una matriz (en el verdadero sentido ... no solo reemplazándolos por
null
), debe asignar una nueva matriz más pequeña y copiar los elementos que desee para retener.
hay alternativas en forma de bibliotecas 3 ª parte (por ejemplo Apache Commons ArrayUtils
), pero puede que desee considerar si vale la pena agregar una dependencia de la biblioteca simplemente por el bien de un método que podría implementarse con 5-10 líneas de código.
Es mejor (es decir, más simple ... y en muchos casos, más eficientes) utilizar una clase List
lugar de una matriz. Esto se encargará (al menos) de aumentar el almacenamiento de respaldo. Y hay operaciones que se encargan de insertar y eliminar elementos en cualquier parte de la lista.
Por ejemplo, la clase ArrayList
utiliza una matriz como respaldo, y crece automáticamente la matriz según sea necesario. No reduce automáticamente el tamaño de la matriz de respaldo, pero puede indicarle que haga esto usando el método trimToSize()
; p.ej.
ArrayList l = ...
l.remove(21);
l.trimToSize(); // Only do this if you really have to.
1 - Me dicen que es "más eficiente en muchos casos" porque ArrayList
utiliza una simple estrategia de "doble del tamaño" cuando se necesita para crecer la matriz de soporte. Esto significa que si creces la lista añadiéndola repetidamente, cada elemento se copiará en promedio un tiempo extra. Por el contrario, si hiciera esto con una matriz, terminaría copiando cada elemento de la matriz casi N/2 veces en promedio.
sin necesidad de utilizar el método System.arraycopy puede eliminar un elemento de una matriz con la siguiente
int i = 0;
int x = 0;
while(i < oldArray.length){
if(oldArray[i] == 3)i++;
intArray[x] = oldArray[i];
i++;
x++;
}
donde 3 es el valor que desea eliminar.
Esto está incompleto. Y realmente no responde la pregunta. –
El uso de ArrayUtils.removeElement(Object[],Object)
de org.apache.commons.lang es, con mucho, la forma más sencilla de hacerlo.
int[] numbers = {1,2,3,4,5,6,7};
//removing number 1
numbers =(int[])ArrayUtils.removeElement(numbers, 1);
He creado esta función o clase. Soy un poco nuevo, pero mi amigo necesitaba esto también por lo que creó esta:
public String[] name(int index, String[] z){
if(index > z.length){
return z;
} else {
String[] returnThis = new String[z.length - 1];
int newIndex = 0;
for(int i = 0; i < z.length; i++){
if(i != index){
returnThis[newIndex] = z[i];
newIndex++;
}
}
return returnThis;
}
}
Desde su revelant bastante, pensé que iba a publicar aquí.
Dado que una matriz tiene un tamaño fijo que se asigna cuando se crea, su única opción es crear una nueva matriz sin el elemento que desea eliminar.
Si el elemento que desea eliminar es el último elemento de la matriz, esto se convierte en fácil de implementar usando Arrays.copy
:
int a[] = { 1, 2, 3};
a = Arrays.copyOf(a, 2);
Después de ejecutar el código anterior, un ahora apuntará a una nueva matriz que contiene sólo 1, 2.
De lo contrario, si el elemento que desea eliminar no es el último, debe crear una nueva matriz en tamaño-1 y copiar todos los elementos excepto la que desea eliminar.
El enfoque anterior no es eficiente. Si necesita administrar una lista mutable de elementos en la memoria, mejor use una Lista. Específicamente, LinkedList
eliminará un elemento de la lista en O(1)
(el más rápido teóricamente posible).
Para mí, la solución de trabajo mejor y más corta para truncar una matriz. ¡Gracias! – Ruwen
Siempre puede expandir una matriz simplemente incrementando el tamaño de la misma al crear una matriz o también puede cambiar el tamaño después de la creación, pero para reducir o eliminar elementos. La solución alternativa sin crear una nueva matriz, posiblemente es:
package sample;
public class Delete {
int i;
int h=0;
int n=10;
int[] a;
public Delete()
{
a = new int[10];
a[0]=-1;
a[1]=-1;
a[2]=-1;
a[3]=10;
a[4]=20;
a[5]=30;
a[6]=40;
a[7]=50;
a[8]=60;
a[9]=70;
}
public void shrinkArray()
{
for(i=0;i<n;i++)
{
if(a[i]==-1)
h++;
else
break;
}
while(h>0)
{
for(i=h;i<n;i++)
{
a[i-1]=a[i];
}
h--;
n--;
}
System.out.println(n);
}
public void display()
{
for(i=0;i<n;i++)
{
System.out.println(a[i]);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Delete obj = new Delete();
obj.shrinkArray();
obj.display();
}
}
¡Comente cualquier error!
Esto no cambia el tamaño de la matriz según lo solicitado. –
Ningún uso de cualquier función predefinida, así como eficiente: --- >>
public static void Delete(int d , int[] array)
{
Scanner in = new Scanner (System.in);
int i , size = array.length;
System.out.println("ENTER THE VALUE TO DELETE? ");
d = in.nextInt();
for (i=0;i< size;i++)
{
if (array[i] == d)
{
int[] arr3 =new int[size-1];
int[] arr4 = new int[i];
int[] arr5 = new int[size-i-1];
for (int a =0 ;a<i;a++)
{
arr4[a]=array[a];
arr3[a] = arr4[a];
}
for (int a =i ;a<size-1;a++)
{
arr5[a-i] = array[a+1];
arr3[a] = arr5[a-i];
}
System.out.println(Arrays.toString(arr3));
}
else System.out.println("************");
}
}
Esto no cambia el tamaño de la matriz según lo solicitado. –
- 1. elemento eliminar de la matriz
- 2. eliminar el primer elemento de la matriz
- 3. NSArray + eliminar elemento de la matriz
- 4. eliminar elemento de la matriz matlab
- 5. PHP: Eliminar el primer y último elemento de la matriz
- 6. Eliminar la primera instancia del elemento coincidente de la matriz
- 7. Eliminar elemento de la matriz multidimensional según la clave
- 8. eliminar elemento de la matriz en función de su valor?
- 9. PHP | ¿Eliminar elemento de la matriz con reordenamiento?
- 10. Cómo eliminar elemento enésimo de la matriz en mongodb
- 11. hallazgo elemento de la matriz
- 12. Eliminar elemento de la matriz, utilizando el segmento
- 13. ¿Cómo eliminar un elemento de matriz basado en la clave?
- 14. ¿La matriz [-1] proporciona el último elemento de la matriz?
- 15. Jquery quitar el elemento de la matriz
- 16. Cómo eliminar elemento de una matriz
- 17. Eliminar elemento de una matriz normal
- 18. Eliminar un elemento de una matriz (Java)
- 19. Eliminar fila de la matriz php
- 20. Eliminar un elemento de matriz y cambiar los restantes
- 21. Eliminar la entrada de la matriz
- 22. Cadena a matriz y luego eliminar el último elemento
- 23. ¿Eliminar cadena de la matriz de PHP?
- 24. VBA, eliminar duplicados de la matriz
- 25. cómo eliminar elementos de la matriz?
- 26. desarmar último elemento de la matriz
- 27. PHP: Eliminar objeto de la matriz
- 28. Eliminar elemento de la matriz si el valor del elemento contiene el carácter de cadena buscado
- 29. Agregar elemento a la matriz en VBScript
- 30. posición del elemento en la matriz
es 'array' la estructura de datos requerida para su caso de uso? Parece que estás usando el martillo equivocado –