# null-Zeilen aus einem Array entfernen



## tex (7. Nov 2006)

Hi,
ich habe ein ganz kleines Problem.

Ich habe ein zweidimensionales Array (im Prinzip eine Tabelle) aus der ich alle Zeilen entfernen will die keine Einträge enthalten (also null sind oder wo length() < 1 ist).

Leider habe ich irgendwie einen Knoten im Gehirn und komme nicht auf eine geeignete Lösung.


----------



## Beni (7. Nov 2006)

Ein Array hat eine feste Grösse, da kann man nichts entfernen. Du könntest jeweils den hinteren Teil des Arrays raufschieben (siehe System.arrayCopy...), und so die Lücken am Ende sammeln. Oder du benutzt eine Liste (ArrayList oder LinkedList), die können ihre Grösse verändern.


----------



## tex (7. Nov 2006)

Beni hat gesagt.:
			
		

> Oder du benutzt eine Liste (ArrayList oder LinkedList), die können ihre Grösse verändern.



Ich hatte es mit einer ArrayList<String[]> versucht, aber wegen des Arrays (String[]) scheint das nicht richtig zu funktionieren.


----------



## Illuvatar (7. Nov 2006)

Ich hab eben einen kleinen Beispielvode für die von Beni beschriebene arraycopy-Methode geschrieben:


```
Object[] deinArray = //...
    Arrays.sort(deinArray, new NullComparator());
    Object[] newArray = new Object[countNotNull(deinArray)];
    System.arraycopy (deinArray, 0, newArray, 0, newArray.length);

//...

  private int countNotNull(Object[] o)
  {
    int cnt = 0;
    for (Object obj : o){
      if (obj != null) cnt++;
    }
    return cnt;
  }

//...

class NullComparator implements Comparator<Object>
{
   public boolean equals (Object obj)
   {
      return obj.getClass().equals(getClass());
   }
   public int compare(Object o1, Object o2)
   {
      if (o1 == null && o2 == null){
         return 0;
      }else if (o1 == null){
         return 1;
      }else if (o2 == null){
         return -1;
      }else{
         return 0;
      }
   }
}
```


----------



## André Uhres (8. Nov 2006)

tex hat gesagt.:
			
		

> ..Ich hatte es mit einer ArrayList<String[]> versucht, aber wegen des Arrays (String[])
> scheint das nicht richtig zu funktionieren.




```
package gui;
/*
 * List2D.java
 */
import java.util.*;
public class List2D {
    private List list2D = new ArrayList();
//    private List<List<String>> list2D = new ArrayList<List<String>>();//1.5
    public List2D() {
        createList2D();
        System.out.println(list2D);
        /* Ausgabe:
        [[11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35]]
         */
    }
    private void createList2D() {
        List subList;
//        List<String> subList;//1.5
        for (int i = 0; i < 3; i++) {
            subList = new ArrayList();
//            subList = new ArrayList<String>();//1.5
            for (int j = 0; j < 5; j++) {
                subList.add((i+1)+""+(j+1));
            }
            list2D.add(subList);
        }
    }
    public static void main(String[] args) {new List2D();}
}
```


----------

