您可以通过对象条件而不是通过索引从数组中删除对象吗?

时间:2019-07-16 10:48:45

标签: java

我最近一直在学习Java数组,并且正在练习做一些库存或邮袋,以便在其中存储,删除和交换对象。

但是我想知道是否有一种方法,例如,将某个对象删除为该对象,而不是因为该对象位于列表的确定索引中...

我有一个带有构造函数的类,该构造函数分配2个属性:'Nombre'(对象的名称)和adicion(整数),因为它可以在游戏中使用,所以我们可以说这是您恢复的hp数通过使用药水

public class Objetos {
    String nombre;
    int adicion;
    public void objetos(String nomb, int sumar){
        adicion = sumar;
        nombre = nomb;
    }

  public void setNombre (String nomb){
        nombre = nomb;
    }

    public String getNombre(){
        return nombre;
    }  


  public void setAdicion (int sumar){
        adicion = sumar;
    }

    public int getAdicion(){
        return adicion;
    }
}

然后,我有这个对象数组:

static Objetos[] objetos_inv = new Objetos[15];
objetos_inv[0] = new Objetos();
objetos_inv[0].nombre = "Potion";
objetos_inv[0].adicion = 20;
System.out.println(objetos_inv[0]);

我添加了一个对象,现在当然可以按其索引位置(0)删除,更改或打印它了,但是如果我不知道(正在发生100%的变化)该对象要去的索引该怎么办放置?我可以将其删除为“药水”吗?

我只是在学习,可能会有很多误解,对不起,如果我说或假设有些愚蠢。感谢您的关注。

4 个答案:

答案 0 :(得分:4)

排序答案:否

为了从数组中删除元素(无论数组的类型),您应该知道要删除/编辑的元素的索引。

您的案例的解决方法

1)如果您有要删除的对象的引用

i)使用List class的实现(例如Arraylist)来存储对象

因此,当您拥有对象的引用时,可以使用

将其删除
objetosList.remove(objectToBeDeleted);

ii)在您的数组中使用common lang的ArrayUtils

ArrayUtils.removeElement(objetos_inv, objectToBeDeleted);

2)如果没有对象的引用,则应在数组中进行搜索,方法是使用值来获取所需对象的索引,然后将该索引用于任何进一步的操作。 / strong>

private Objetos findObjetoByNombre(Objetos[] objetos, String nombre){
   for(Objetos objeto: objetos){
      if(objeto.getNombre().equals(nombre){
         return objeto;
      }
   }
   return null;
}

答案 1 :(得分:0)

我不确定确切要做什么,但是如果您想要对象的“集合”(例如数组),并且想要通过对象而不是索引来获取所需的对象,应该看Set

也许只有arrayList应该这样做。

答案 2 :(得分:0)

您可以使用Common lang的ArrayUtils。

array = ArrayUtils.removeElement(数组,元素) 在这里,您可以检查元素并调用方法以删除元素

答案 3 :(得分:0)

关于您的描述,我认为您需要的是地图。您要存储许多Objetos对象并通过“ nombre”变量的值进行访问。

尝试使用Hashmap:

public static void main(String[] args) {
        Objetos objetos = new Objetos();
        objetos.setNombre("Potion");
        objetos.setAdicion(1);

        Map<String, Objetos> objetosMap = new HashMap();
        objetosMap.put(objetos.getNombres(), objetos);
    }

现在,您可以通过其nombre值访问地图中的Objetos对象。