Как удалять объект договоренности объектов в Java?

Из какого способа я могу удалять объект договоренности объектов, но не используя библиотек или классов, уже созданных Java?

10
задан 12.10.2016, 21:39
4 ответа

ВїDe, что способ я могу удалять объект договоренности объектов, но не используя библиотек или классов, уже созданных Java?

Привет Сантьяго, , не используя библиотек , у тебя может быть несколько выборов, например:

  public static Object[] remueveElement(Object[] arrayObjetos, int i) {
      System.arraycopy(arrayObjetos, i + 1, objeto,i, arrayObjetos.length - 1 - i);
      return arrayObjetos; 
   }

, где arrayObjetos - первоначальный array и i, - элемент внутри array, который ты хочешь удалить.

Восток - другой метод:

   private  static Object[]  remueveElement(Object[] arrayObjetos, int i) {
    Object[] nuevoArray = new Object[arrayObjetos.length - 1];
     if (i > 0){
           System.arraycopy(arrayObjetos, 0, nuevoArray, 0, i);
     }
     if (nuevoArray.length > i){
      System.arraycopy(arrayObjetos, i + 1, nuevoArray, i, nuevoArray.length - i);
     }
     return nuevoArray;
   }

Пример, чтобы подкреплять функционирование их mГ©todos предложенные:

Используя любой из них mГ©todos ты можешь удалять элемент твоей договоренности объектов, я добавляю пример Вашего использования, где мы определяем array объектов 10 элементов и хотим удалить того, который находит в индексе 3:

   //Creamos un array de 10 elementos 
   Object[] arrayOriginal = new Object[10];
    for( int i=0; i<10; i++ )
    arrayOriginal[i] = new Object();

     for( int i=0; i<arrayOriginal.length; i++ )
   System.out.println("array original elemento " + i + " :    " + arrayOriginal[i]);

   //eliminamos el elemento en el indice 3.
   Object[] arrayresultante = remueveElement(arrayOriginal, 3);

     for( int i=0; i<arrayresultante.length; i++ )
   System.out.println("array resultante elemento " + i + " :   " + arrayresultante[i]);

ты можешь наблюдать, что элемент в индексе 3 был удален из первоначальной договоренности объектов:

array original elemento 0 :    java.lang.Object@7ea987ac
array original elemento 1 :    java.lang.Object@12a3a380
array original elemento 2 :    java.lang.Object@29453f44
array original elemento 3 :    java.lang.Object@5cad8086   //objeto a eliminar!.
array original elemento 4 :    java.lang.Object@6e0be858
array original elemento 5 :    java.lang.Object@61bbe9ba
array original elemento 6 :    java.lang.Object@610455d6
array original elemento 7 :    java.lang.Object@511d50c0
array original elemento 8 :    java.lang.Object@60e53b93
array original elemento 9 :    java.lang.Object@5e2de80c

array resultante elemento 0 :   java.lang.Object@7ea987ac
array resultante elemento 1 :   java.lang.Object@12a3a380
array resultante elemento 2 :   java.lang.Object@29453f44
array resultante elemento 3 :   java.lang.Object@6e0be858
array resultante elemento 4 :   java.lang.Object@61bbe9ba
array resultante elemento 5 :   java.lang.Object@610455d6
array resultante elemento 6 :   java.lang.Object@511d50c0
array resultante elemento 7 :   java.lang.Object@60e53b93
array resultante elemento 8 :   java.lang.Object@5e2de80c
7
ответ дан 24.11.2019, 13:13
  • 1
    Я боюсь, что и #180; System и # 180; не выполни обязательное условие " библиотеки или классы, уже созданные из-за Java". – Jose Antonio Dura Olmos 04.10.2016, 22:42
  • 2
    Возможно и #237; ndice 3 не объект " java.lang. Object@29453f44"? считая, что всегда и #237; ndice инициал - 0 (первый). Он дает основание для двусмысленностей – Patricio Bonilla 13.10.2016, 02:06
  • 3
    @PatricioBonilla элемент Array с индексом 3 java.lang.Object@5cad8086, как ты это комментируешь, инициализирует с 0 первый элемент Array. – Jorgesys♦ 13.10.2016, 02:13
  • 4
    +1 Несоответствующий комментарий этого человека, который комментирует: " Я боюсь, что System incumole обязательное условие библиотек или классов, уже созданных из-за java" Предлагая выходить на этот ответ puntuaci и # 243; n отрицание и предлагая dem и # 225; s ответы давать точки благосклонности, когда Ваш комментарий быть должным и # 237; чтобы применяться для dem и # 225; s ответы. Несоответствующие . – Jorgesys♦ 24.10.2016, 04:29
  • 5
    @Elenasys он был смущенным. Иметь индекс 3 не подразумевает, что это был третий элемент договоренности. Спасибо за aclaraci и # 243; n. – Patricio Bonilla 28.10.2016, 02:04
  • 6
    Ах hehe, не беспокойся друг, привет! :) – Jorgesys♦ 28.10.2016, 02:06

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

Пример:

public class EjemploEliminarDeArreglo {
    public boolean eliminar(int[] arreglo, int elemento) {
        boolean resultado = false;
        for (int i = 0; i < arreglo.length; i++) {
            if (arreglo[i] == elemento) {
                for (int j = i; j < arreglo.length - 1; j++) {
                    arreglo[j] = arreglo[j+1];
                }
                arreglo[arreglo.length - 1] = 0;
                resultado = true;
            }
        }
        return resultado;
    }

    public void ejemploEliminar(int[] arreglo, int numero) {
        //mencionaste no usar librerías externas de Java para
        //eliminar el elemento, pero no mencionaste
        //si no debían usarse para otras funciones como
        //mostrar su contenido
        System.out.println(Arrays.toString(arreglo));
        if (eliminar(arreglo, numero)) {
            System.out.println(
                String.format(
                    "Se eliminó %d. Ahora el arreglo es: %s",
                    numero, Arrays.toString(arreglo)));
        } else {
            System.out.println("El arreglo sigue intacto.");
        }
    }

    public static void main(String[] args) {
        //arreglo definido de manera estática
        int[] arreglo = { 1, 2, 3, 4, 5 };
        EjemploEliminarDeArreglo ejemplo = new EjemploEliminarDeArreglo();
        System.out.println(Arrays.toString(otroArreglo));
        //eliminando los números 3, 10 y 4 del arreglo
        ejemplo.ejemploEliminar(arreglo, 3);
        ejemplo.ejemploEliminar(arreglo, 10);
        ejemplo.ejemploEliminar(arreglo, 4);

        //el mismo caso de antes pero asignamos los valores del arreglo desde un for
        int[] otroArreglo = new int[5];
        //solo a modo de demostración, imprimimos el contenido del arreglo
        //será algo como [0, 0, 0, 0, 0]
        //porque eso es un arreglo de enteros vacío en Java
        System.out.println(Arrays.toString(otroArreglo));
        //ahora, le asignamos elementos
        for (int i = 1; i <=5; i++) {
            otroArreglo[i-1] = i;
        }
        //y lo volvemos a mostrar en la consola
        //ahora luce [1, 2, 3, 4, 5] como lucía `arreglo`
        //antes que le eliminaran sus datos
        System.out.println(Arrays.toString(otroArreglo));
    }
}

В Java, у договоренности есть длина, которая не меняется, обозначенная признаком length, а следовательно, "удалив" элемент, ты в действительности показываешь, что у твоей договоренности будут пустые элементы. Это приемлемое и нормальное в договоренностях.

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

Конечно существует так называемый класс ArrayList что он дает печать манипулирования договоренностью, которая растет dinámicamente, но это не является верным. Видя Ваши шрифты, что мы находим, состоит в том, что он всегда поддерживает единственную договоренность и количество элементов этой договоренности, что вызывает чувство того, что наша договоренность растет dinámicamente. Также, если он нуждается в том, чтобы вынести больше элементов, чем он имеет в настоящее время, что он сделает:

  • Создавать новую договоренность с достаточным размером, чтобы выносить больше элементов (обычно это длина из-за 1.5).
  • Копировать элементы настоящей договоренности в новую договоренность.
  • Использовать новую договоренность, чтобы продолжать хранить информацию.
5
ответ дан 24.11.2019, 13:13
  • 1
    Одна формирует м и # 225; s работоспособный удаления " in situ" он состоит в том, чтобы копировать и #250; ltimo элемент, в который он будет удален. Хотя одинокое служит, если не нужно предохранять и #243; rden. И осложняется вещь, если мы думаем, что уже могут быть элементы в ней и #250; ltima posici и # 243; n, что могут быть null. С quiz и # 225; лучше оставлять это, как это поместил Luiggi (+1). – Jose Antonio Reinstate Monica 04.10.2016, 22:49

Самая простая форма (Не используя ни классов ни Библиотек, созданных Java) состоит В том, чтобы Пробегать Array и проверять с одним if условие, чтобы удалять элемент. Мы использовали бы Временную Договоренность Объектов, чтобы добавлять тех, которые не выполняют условие

public static void main(String[] args) 
{

    Object[] array = new Object[]{"A","B","C"};/*Array en este caso de String */
    Object[] temp = new Object[array.length]; /* Temporal Array*/
    for (int i = 0; i < array.length; i++) {
         /* El String.valueOf(array[i]) es para convertir a 
           String el Objecto  comparamos si no es igual a b ,si se cumple 
           lo agregamos al temporal*/
         if(!String.valueOf(array[i]).toLowerCase().equals("b"))
        {
            temp[i]=array[i]; /* Agregamos al Arreglo Temporal */
        }
    }

    /* Imprimir */
    for (Object temp1 : temp) {
        System.out.println((temp1!=null)?String.valueOf(temp1):"");
    }

} 

Если встречается выбор использовать Классы, он мог бы использовать ArrayList, так как у этой нет установленного размера, как у них есть Договоренности..., смоги иметь нечто похожее, чтобы удалять Элемент

/* Convertimos el Array a Un ArrayList  aunque se podría crear desde el 
     inicio y agregar con lista.add("A"); lista.add("B"); etc*/
ArrayList<Object> lista = new ArrayList<>(Arrays.asList(array)); 
lista.remove("A"); /* Eliminamos A*/

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

3
ответ дан 24.11.2019, 13:13

Если ты хочешь иметь nulls или не в твоем array ты можешь переходить из двух форм. Если для тебя не имеют значение nulls в твоей договоренности, ты можешь пробегать это просто, когда ты найдешь этот objecto seteas будка в null. Если ты не хочешь иметь nulls, ты можешь использовать вспомогательный array. TambiГ©n ты можешь хотеть решить, удаляешь ли ты первый объект, который ты находишь, что он был равен, или удаляешь все те, кто были бы равными тому, которого ты хочешь удалить. Я оставляю тебе один cГіdigo со всеми этими случаями:

public class BorrarObjetosDeArreglos {

public static void main(String[] args) {
    Object[] array = new Object[] { 1, 2, 3, 4, 2 };
    BorrarObjetosDeArreglos arrayUtils = new BorrarObjetosDeArreglos();

    // Borra el primer elemento que encuentra
    arrayUtils.borrarUno(2, array);
    // imprime [0]=1,a[1]=null,a[2]=3,a[3]=4,a[4]=2
    arrayUtils.imprimirArreglo(array, "a");

    // Vuelvo a crear el arreglo porque el anterior me quedo con el 2
    // borrado
    array = new Object[] { 1, 2, 3, 4, 2 };

    // Borra todos los que encuentra
    arrayUtils.borrarTodos(2, array);
    // imprime a[0]=1,a[1]=null,a[2]=3,a[3]=4,a[4]=null
    arrayUtils.imprimirArreglo(array, "a");

    array = new Object[] { 1, 2, 3, 4, 2 };
    Object[] arrayNuevo = arrayUtils.borrarTodoCrearArrayNuevo(2, array);

    // imprime a[0]=1,a[1]=3,a[2]=4
    arrayUtils.imprimirArreglo(arrayNuevo, "a");
}

public void imprimirArreglo(Object[] arreglo, String nombreArreglo) {
    StringBuffer sf = new StringBuffer();
    for (int i = 0; i < arreglo.length - 1; i++) {
        sf.append(nombreArreglo + "[" + i + "]=" + arreglo[i] + ",");
    }
    sf.append(nombreArreglo + "[" + (arreglo.length - 1) + "]=" + arreglo[arreglo.length - 1]);
    System.out.println(sf.toString());

}

public void borrarUno(Object aBorrar, Object[] arreglo) {
    for (int i = 0; i < arreglo.length; i++) {
        Object objetoEnArray = arreglo[i];
        if (objetoEnArray != null && objetoEnArray.equals(aBorrar)) {
            arreglo[i] = null;
            return;
        }
    }
}

public void borrarTodos(Object aBorrar, Object[] arreglo) {
    for (int i = 0; i < arreglo.length; i++) {
        Object objetoEnArray = arreglo[i];
        if (objetoEnArray != null && objetoEnArray.equals(aBorrar)) {
            arreglo[i] = null;
        }
    }
}

public Object[] borrarTodoCrearArrayNuevo(Object aBorrar, Object[] arreglo) {
    Integer cantidadBorrados = 0;
    for (int i = 0; i < arreglo.length; i++) {
        Object objetoEnArray = arreglo[i];
        if (objetoEnArray != null && objetoEnArray.equals(aBorrar)) {
            arreglo[i] = null;
            cantidadBorrados++;             
        }
    }
    Object[] arregloNuevo = new Object[arreglo.length - cantidadBorrados];
    Integer indiceEnArrayNuevo = 0;
    for (Object objetoEnArrayViejo : arreglo) {
        if (objetoEnArrayViejo != null) {
            arregloNuevo[indiceEnArrayNuevo] = objetoEnArrayViejo;
            indiceEnArrayNuevo++;
        }
    }
    return arregloNuevo;
}

}

1
ответ дан 24.11.2019, 13:13
  • 1
    Очень полный. Я случай и #180; borrarTodoCrearArrayNuevo и # 180; har и # 237; в уважая первоначальную договоренность; не делая изменений в и #233; l. В любом случае +1. – Jose Antonio Reinstate Monica 04.10.2016, 22:46