Elemente aus zweidimensionalen Array löschen

News rund um die Java-Welt

Moderator: wegus

Antworten
Taramsis
Beiträge: 38
Registriert: 09.07.2009, 15:16

Elemente aus zweidimensionalen Array löschen

Beitrag von Taramsis » 29.08.2009, 20:18

Hi Leute,

ich hab ne wahrscheinlich banale Frage!
Ich möchte ein zweidimensonales Array untersuchen, ob ein bestimmtes Element enthalten ist und dann die komplette Reihe löschen.
Z.B. hätte ich folgendes gegeben:
Array = [a,f][r,t][j,a][m,n][a,t][x,y]
nun frage ich wenn a enthalten lösche Tupel:
ArrayNeu= [r,t][m,n][x,y]

Benutzeravatar
arittner
Beiträge: 3229
Registriert: 05.08.2008, 07:20
Wohnort: Südniedersachsen
Kontaktdaten:

Re: Elemente aus zweidimensionalen Array löschen

Beitrag von arittner » 30.08.2009, 08:08

Moin!

Arrays kann man nach erster Initialiserung nicht mehr in ihrer Struktur verändern. Als Ersatz gibt es die ArrayList Collection.

Beste Grüße,
Josch.
JNBB/BeanDev-Blog | Twitter@beandev
Bild
Sun Certified Specialist for NetBeans IDE

Taramsis
Beiträge: 38
Registriert: 09.07.2009, 15:16

Re: Elemente aus zweidimensionalen Array löschen

Beitrag von Taramsis » 30.08.2009, 14:07

Hi,

ich hab folgendes gebastelt und es gibt mir ständig ein "ArrayIndexOutOfBoundsException: 4" aus!
Und ich kanns einfach nicht verstehen!

Code: Alles auswählen

managerAlg.getNotModkombo()
ist ein zweidimensionales Array und

Code: Alles auswählen

managerAlg.getNewAuswahlMods()
ist ein eindimensionales Array

Code: Alles auswählen

Object[][] resModKombo = new Object[managerAlg.getNotModkombo().length][2];
                int index = 0; 
                for (int i = 0; i < managerAlg.getNewAuswahlMods().length; i++) {
                    for (int j = 0; j < managerAlg.getNotModkombo().length; j++) {
                        if ( !(managerAlg.getNotModkombo()[j][0].equals(managerAlg.getNewAuswahlMods()[i])) 
                                && !(managerAlg.getNotModkombo()[j][1].equals(managerAlg.getNewAuswahlMods()[i])) ) {
                            resModKombo[index++] = managerAlg.getNotModkombo()[j]; // <- Zeile mit der Exception
                        } 
                    }
                }
                Object[][] resModKombo2 = Arrays.copyOfRange(resModKombo, 0, index);
Was mach ich falsch!?
Wie würde den eine ArrayList Colection aussehen?

Taramsis
Beiträge: 38
Registriert: 09.07.2009, 15:16

Re: Elemente aus zweidimensionalen Array löschen

Beitrag von Taramsis » 30.08.2009, 14:11

Ich meine ich weiß wie eine ArrayList funktioniert, aber zweidimensional?

Benutzeravatar
arittner
Beiträge: 3229
Registriert: 05.08.2008, 07:20
Wohnort: Südniedersachsen
Kontaktdaten:

Re: Elemente aus zweidimensionalen Array löschen

Beitrag von arittner » 30.08.2009, 17:09

Moin!

Code: Alles auswählen

List<List> dimA = new ArrayList<List>();

for (int i=0; i < 10; i++) {
  List dimB = new ArrayList();
  dimA.add(dimB);
}
Man kann aber recht schlecht darauf zugreifen. Eine sehr interessante Möglichkeit (aber Speicherintensiv) wäre eine HashMap:

Erstmal, damit es bequem ist, ein Index-Objekt:

Code: Alles auswählen


package org.sepix.arraytools;

public class Index {
  private int i;
  private int j;

  public static Index ix (int i, int j) {
    return new Index (i, j);
  }

  public Index (int i, int j); {
    this.i = i;
    this.j = j;
  }
    public int getI() {
      return i;
    }

    public int getJ() {
      return j;
    }

    @Override
    public boolean equals(Object obj) {
      if (obj == null) {
        return false;
      }
      if (getClass() != obj.getClass()) {
        return false;
      }
      final Index other = (Index) obj;
      if (this.i != other.i) {
        return false;
      }
      if (this.j != other.j) {
        return false;
      }
      return true;
    }

    @Override
    public int hashCode() {
      int hash = 3;
      hash = 67 * hash + this.i;
      hash = 67 * hash + this.j;
      return hash;
    }
}
Jetzt kann man Index in einer Map verwenden:

Code: Alles auswählen

import static org.sepix.arraytools.Index.*;

...

public final static void main (String args..) {

  Map<Index, String> array = new HashMap<Index, String>();
  
  array.put (ix(0, 0), "Demodaten");
  array.put (ix(0, 1), "Noch ein Wert");
  array.put (ix(7, 7), "Ha, das geht auch!");

  String data = array.get (ix(0,1));
  array.remove (ix(0,0));

  System.out.println (array.values());
}
Vorteile: Beliebige Lücken in dem Array, sehr gut lesbar, man darf natürlich auch beliebige Elemente löschen.

Nachteile: Hocher Speicherplatzverbrauch, relativ langsamer Zugriff, Größe von Zeilen und Spalten nicht zu ermitteln (was man aber in eine Klasse ArrayMap extends HashMap reinbringen könnte).

Beste Grüße,
Josch.
JNBB/BeanDev-Blog | Twitter@beandev
Bild
Sun Certified Specialist for NetBeans IDE

Taramsis
Beiträge: 38
Registriert: 09.07.2009, 15:16

Re: Elemente aus zweidimensionalen Array löschen

Beitrag von Taramsis » 30.08.2009, 20:03

Hi,

habs mit zwei ArrayLists gelöst!!

Danke nochmals!

Wie kann man eigentlich den Status der Fragen ändern?

Gruß

Antworten