2016-10-08 6 views
5

Ich habe eine Klasse namens SparseMatrix. Es enthält eine ArrayList of Nodes (auch Klasse). Ich frage mich, wie ich durch das Array iterieren und auf einen Wert in Node zugreifen kann. Ich habe folgendes versucht:Wie durch ArrayList von Objekten iterieren?

//Assume that the member variables in SparseMatrix and Node are fully defined. 
class SparseMatrix { 
    ArrayList filled_data_ = new ArrayList(); 
    //Constructor, setter (both work) 

    // The problem is that I seem to not be allowed to use the operator[] on 
    // this type of array. 
    int get (int row, int column) { 
     for (int i = 0; i < filled_data_.size(); i++){ 
      if (row * max_row + column == filled_data[i].getLocation()) { 
       return filled_data[i].getSize(); 
      } 
     } 
     return defualt_value_; 
    } 
} 

Ich werde wahrscheinlich zu statischem Arrays wechseln (und remake es jedes Mal, wenn ich hinzufügen, ein Objekt). Wenn jemand eine Lösung hat, würde ich es sehr schätzen, wenn Sie es mit mir teilen. Danke auch im Voraus dafür, dass du mir geholfen hast.

Fühlen Sie sich frei, Fragen zu stellen, wenn Sie hier nichts verstehen.

+1

Sie sollten verwenden Generics, und Sie können [i] nicht verwenden, um ein Element aus einer ArrayList zu erhalten, müssen Sie .get (i) verwenden. –

Antwort

2

Zunächst einmal werfen, sollten Sie nicht roh Typen verwenden. Weitere Informationen finden Sie unter folgendem Link: What is a raw type and why shouldn't we use it?

Die Lösung besteht darin, den Objekttyp anzugeben, der von Ihrer Array-Liste gehalten wird. Ändern Sie die Erklärung:

ArrayList<Node> filled_data_ = new ArrayList<>(); 

Dann können Sie jedes Element in der Array-Liste zuzugreifen filled_data_.get(i) mit (im Gegensatz zu filled_data_[i], die für eine regelmäßige Anordnung funktionieren würde).

`filled_data_.get(i)` 

Das obige gibt das Element mit dem Index i zurück. Dokumentation hier: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#get(int)

+0

Das hilft sehr, danke. (Ich habe Erfahrung mit C++, daher sind Java-Konzepte für mich ziemlich neu.) Ich habe einen Weg gefunden, dies mit statischen Arrays (ineffizient) zu tun, also werde ich dies berücksichtigen. Nochmals vielen Dank für Ihre Hilfe. – sudomeacat

+0

@diuqSehTnettiK kein Problem =] – nhouser9

1

Wenn Sie nicht generisch verwendet haben, dann müssen Sie das Objekt

//Assume that the member variables in SparseMatrix and Node are fully defined. 
class SparseMatrix { 
ArrayList filled_data_ = new ArrayList(); 
//Constructor, setter (both work) 

// The problem is that I seem to not be allowed to use the operator[] on 
// this type of array. 
int get (int row, int column) { 
    for (int i = 0; i < filled_data_.size(); i++){ 
     Node node = (Node)filled_data.get(i); 
     if (row * max_row + column == node.getLocation()) { 
      return node.getSize(); 
     } 
    } 
    return defualt_value_; 
} 

}

+0

Das klingt interessant, bitte geben Sie ein Beispiel dafür, was Sie meinen. – sudomeacat

0

Wenn Array-Liste enthält Nodes die getLocation() definiert Sie nutzen könnten:

((Nodes)filled_data_.get(i)).getLocation() 

Sie auch

ArrayList<Nodes> filled_data_ = new ArrayList<Nodes>(); 
3

Unter der Annahme, filled_data_ ist eine Liste, die Liste der Objekte aus a definieren könnte Klasse namens Knoten.

List<Nodes> filled_data_ = new ArrayList<>(); 
for (Node data : filled_data_) { 
    data.getVariable1(); 
    data.getVariable2(); 
} 

Mehr Infos http://crunchify.com/how-to-iterate-through-java-list-4-way-to-iterate-through-loop/

+0

Ich habe dies nicht erwähnt, aber ich werde nicht die gesamte ArrayList analysieren. Trotzdem ist das gut zu wissen. Vielen Dank. – sudomeacat

0

Wenn Sie das ArrayList Objekt erstellen, sollten Sie die Art der enthaltenen Elemente mit <> Klammern angeben. Es ist auch gut, den Verweis auf die List Schnittstelle zu behalten - nicht ArrayList Klasse. Iterieren durch eine solche Sammlung, verwenden foreach Schleife:

Hier ein Beispiel für die Node-Klasse ist:

public class Node { 
    private int value; 

    public Node(int value) { 
     this.value = value; 
    } 

    public void setValue(int value) { 
     this.value = value; 
    } 

    public int getValue() { 
     return value; 
    } 
} 

Hier ist ein Beispiel für die Hauptklasse:

public class Main { 

    public static void main(String[] args) { 

     List<Node> filledData = new ArrayList<Node>(); 
     filledData.add(new Node(1)); 
     filledData.add(new Node(2)); 
     filledData.add(new Node(3)); 

     for (Node n : filledData) { 
      System.out.println(n.getValue()); 
     } 
    } 
} 
Verwandte Themen