Matrix ohne Array erstellen

hellyeah

Neues Mitglied
Hallo liebe Leute, ich würde gerne mal fragen, wie man Matrix im Java ohne Array erstellen aber mit lineare Liste. ich danke euch im Voraus
 

fendix

Mitglied
Falls viele Einfüge-(add) und Löschoperationen (remove) durchgeführt werden: LinkedList<int>
Falls viele direkte Abfragen (get) erfolgen: ArrayList<int>

Oder die Lösung wie mein Vorredner, das Interface List nutzen.
 

Robert Zenz

Top Contributor
Du kannst natuerlich jedes Array von beliebiger Dimension als Listen in selber Dimension abbilden.

Java:
int[][][] == List<List<List<Integer>>>

Allerdings musst du hierbei auf Autoboxing ein wenig aufpassen. Waehrend ein Array aus jedem Typ, inklusive Primitiven bestehen kann (also "int"), koennen Listen nur Objekte aufnehmen (also "Integer"). Die Konvertierung zwischen den beiden Typen nennt sich Autoboxing und wird meistens transparent vom Compiler uebernommen. Beispiel:

Java:
int primitive = 5;
Integer object = new Integer(7);

int resultPrimitive = primitive + object;
Integer resultObject = primitive + object;

Im Hintergrund wird dies automatisch zu:

Java:
int primitive = 5;
Integer object = new Integer(5);

int resultPrimitive = primitive + object.intValue();
Integer resultObject = Integer.valueOf(primitive + object.intValue());

Du merkst also dass die "einfache" Addition ploetzlich zu mehreren Funktionsaufrufen auf Objekten wird. Dies kann sehr unfoerderlich fuer die Performance sein, also sollte man das immer im Hinterkopf behalten. Das gilt auch alles fuer Vergleiche:

Java:
primitive == object // false
primitive == object.intValue() // true
Integer.valueOf(primitive) == object // Undefiniert
new Integer(primitive) == object // false

Die Sache mit "Integer.valueOf" ist die, dass dahinter eventuell ein Objet-Cache steht, oder vielleicht auch nicht, dass ist ein Implementierungs-Detail der JVM. In OpenJDK gibt es tatsaechlich einen Cache fuer die Werte von -128 bis 127, was dann zu diesem Verhalten fuehrt:

Java:
Integer.valueOf(7) == Integer.valueOf(7) // true
Integer.valueOf(-128) == Integer.valueOf(-128) // true
Integer.valueOf(127) == Integer.valueOf(127) // true

Integer.valueOf(-300) == Integer.valueOf(-300) // false
Integer.valueOf(1024) == Integer.valueOf(1024) // false

Behalte das also im Hinterkopf wenn du mit "int" und "Integer" arbeitest, insbesondere wenn du das Boxing/Casting nicht explizit machst.
 

Robert Zenz

Top Contributor
Als Nachsatz, du kannst natuerlich auch nur mit einer einfachen Liste arbeiten, und den Offset dann haendisch berechnen:

Java:
int columns = 25;
int rows = 25;

List<Integer> matrix = new ArrayList<>();

matrix.get(positionY * rows + positionX);
 
G

Gelöschtes Mitglied 65838

Gast
oder du baust dir einfach mal eine eigene Struktur...eine Liste zu schreiben ist nicht shcwer hab ich auch gmeacht für mein Programm

Java:
package controller;

public class AmountList {
      Node head;
      public AmountList() {
          head = new Node (null,null);
      }
      public void increase(String name)
      { 
          Boolean checker = true ;
          Node n=head;
          while( n.next !=null )
          {
              if(n.next.cardName==name) {
                  n.next.amount++;
                  checker = false;
              }
              n=n.next;
          }
          if(checker) n.next=new Node(name,n.next);
      }
      public void decrease(String name)
      { 
          Node n=head;
          while( n.next !=null )
          {
              if(n.next.cardName==name) {
                  if(n.next.amount-1 == 0) {
                      delete(n.next);
                      break;
                  }
                  else n.next.amount--;
              }
              n=n.next;
          }
      }
      private void delete(Node toDelete) {
          Node n=head;
          while( n.next !=null )
          {
              if(n.next==toDelete) {
                  n.next = toDelete.next;
                  break;
              }
              n = n.next;
          }
      }
      public int getMyCardAmount(String nameOfCard) {
          Node n=head;
          while( n.next !=null )
          {
              if(n.next.cardName==nameOfCard) return n.next.amount;
              n=n.next;
          }
          return 0;
      }
      private class Node
      {
          String cardName;
          Node next;
          int amount = 1;
        public Node(String cardName ,Node n) {
          this.cardName = cardName;
            next = n;
        }
      }
    }

das kannst dir dann umbauen wie du lustig bist um deine matrix zu haben
 

Oneixee5

Top Contributor
oder du baust dir einfach mal eine eigene Struktur...eine Liste zu schreiben ist nicht shcwer hab ich auch gmeacht für mein Programm

Java:
package controller;

public class AmountList {
      Node head;
      public AmountList() {
          head = new Node (null,null);
      }
      public void increase(String name)
      {
          Boolean checker = true ;
          Node n=head;
          while( n.next !=null )
          {
              if(n.next.cardName==name) {
                  n.next.amount++;
                  checker = false;
              }
              n=n.next;
          }
          if(checker) n.next=new Node(name,n.next);
      }
      public void decrease(String name)
      {
          Node n=head;
          while( n.next !=null )
          {
              if(n.next.cardName==name) {
                  if(n.next.amount-1 == 0) {
                      delete(n.next);
                      break;
                  }
                  else n.next.amount--;
              }
              n=n.next;
          }
      }
      private void delete(Node toDelete) {
          Node n=head;
          while( n.next !=null )
          {
              if(n.next==toDelete) {
                  n.next = toDelete.next;
                  break;
              }
              n = n.next;
          }
      }
      public int getMyCardAmount(String nameOfCard) {
          Node n=head;
          while( n.next !=null )
          {
              if(n.next.cardName==nameOfCard) return n.next.amount;
              n=n.next;
          }
          return 0;
      }
      private class Node
      {
          String cardName;
          Node next;
          int amount = 1;
        public Node(String cardName ,Node n) {
          this.cardName = cardName;
            next = n;
        }
      }
    }

das kannst dir dann umbauen wie du lustig bist um deine matrix zu haben
Bitte nicht dieses Beispiel verwenden. Eine eigene Liste zu implementieren ist scheinbar doch nicht so leicht.
 
K

kneitzel

Gast
Also eigene Abstrakte Datentypen zu schreiben ist meist schlicht unnötig. Was man braucht, findet man in der Regel direkt in den Collections vom Java Framework. Und das incl. der Implementation aller wichtigen Interfaces so dass auch die Interaktion sicher gestellt ist.

Das vermeintliche ‚Ich mach da schnell etwas in 5 Minuten‘ hatten wir schon öfters hier im Forum und da hatte sich eigentlich immer gezeigt, dass dies nicht wohl durchdacht war und es dann schnell komplexer wurde ...

@Joreyk: Ist vielleicht eine nette Übung für Dich: schau dir mal die Üblichen Interfaces an und implementiere diese für Deine Liste. Das sind Dinge, die ich immer sehr Interessant fand und man lernt / vertieft da doch einiges meine ich.
 
G

Gelöschtes Mitglied 65838

Gast
Also eigene Abstrakte Datentypen zu schreiben ist meist schlicht unnötig. Was man braucht, findet man in der Regel direkt in den Collections vom Java Framework. Und das incl. der Implementation aller wichtigen Interfaces so dass auch die Interaktion sicher gestellt ist.

Das vermeintliche ‚Ich mach da schnell etwas in 5 Minuten‘ hatten wir schon öfters hier im Forum und da hatte sich eigentlich immer gezeigt, dass dies nicht wohl durchdacht war und es dann schnell komplexer wurde ...

@Joreyk: Ist vielleicht eine nette Übung für Dich: schau dir mal die Üblichen Interfaces an und implementiere diese für Deine Liste. Das sind Dinge, die ich immer sehr Interessant fand und man lernt / vertieft da doch einiges meine ich.
Java - The List Interface - Tutorialspoint

ich hatte mir das angeschaut und es hat sich raus gestellt dass ich "das meiste" gar nicht brauche

es darf zb gar nicht möglich sein ein Objekt auszugeben an einer stelle oder ein Objekt an einer stelle einfach so zu lesen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N lwjgl Projection Matrix löscht Dreieck Allgemeine Java-Themen 1
T Google Distance Matrix API Hello World/ Client Secret Allgemeine Java-Themen 3
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
R Multiplikation von Matrix und Vektor Allgemeine Java-Themen 5
P Matrix-Vektor Multiplikation Allgemeine Java-Themen 8
P Matrix erstellen Allgemeine Java-Themen 1
P Matrix-Vektor-Multiplikation Allgemeine Java-Themen 25
J Matrix Allgemeine Java-Themen 2
R Bibliothek für Darstellung von char auf 5x7 Dot-Matrix Allgemeine Java-Themen 2
K LED-Matrix oder andere "Hardware" für JavaProgrammierung Allgemeine Java-Themen 9
D Suche Matrix Libraries Allgemeine Java-Themen 11
P Matrix von Tastatur in 2D Array??? Allgemeine Java-Themen 7
P Matrix Kurtosis berechnen Allgemeine Java-Themen 40
D 8x8 Matrix mit Schachbrettbeschriftung Allgemeine Java-Themen 8
E Zufall in Matrix Allgemeine Java-Themen 10
S Algoritmus Distribution in einer Matrix Allgemeine Java-Themen 7
C Linie in Matrix machen Allgemeine Java-Themen 5
D Matrix, ArrayList, null-Zellen Allgemeine Java-Themen 6
D Zweidimensionales Array als Matrix ausrpinten lassen Allgemeine Java-Themen 4
S Darstellung einer dynamischen Matrix Allgemeine Java-Themen 9
T Applikation für RGB LED Matrix Allgemeine Java-Themen 7
T DataFrame (Matrix mit mit verschiedenen Typen pro Spalte) Allgemeine Java-Themen 4
S Array Matrix erstellen? Allgemeine Java-Themen 9
RoliMG matrix diagonalen initialisieren Allgemeine Java-Themen 2
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
B Entfernen von Zeilen/Spalten aus einer Matrix Allgemeine Java-Themen 8
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
W Matrix potenzieren Allgemeine Java-Themen 4
E ArrayList Matrix sortieren Allgemeine Java-Themen 4
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
T Datum OHNE Uhrzeit Zeitzonen-übergreifend Allgemeine Java-Themen 4
N mit sysout, ohne sysout Allgemeine Java-Themen 17
O Programmierprüfung auf moodle ohne Hilfsmittel... Allgemeine Java-Themen 23
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
M Switches ohne String Allgemeine Java-Themen 18
A Java JDK ohne Oracle Konto Allgemeine Java-Themen 5
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
A Java ListNode Element einfügen ohne Bibliothek Allgemeine Java-Themen 6
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
N Keylistener ohne Dazugehörige Gui Allgemeine Java-Themen 6
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
Kirby.exe Keyboard Input ohne Enter Allgemeine Java-Themen 43
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S Potenzieren mit rationalen Potenzen ohne Math.pow Allgemeine Java-Themen 16
F Timestamp in Oracle ohne Formatierung reinbekommen Allgemeine Java-Themen 7
M Drucken ohne Dialog Allgemeine Java-Themen 1
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
J .java-Dateitext Compile zur Laufzeit ohne File Allgemeine Java-Themen 15
O Zugriff auf mySQL ohne JDBC Allgemeine Java-Themen 3
S Input/Output Jave.utill.logging ohne Default-Locale also in Englisch Allgemeine Java-Themen 3
J ftp - delete file ohne appache Allgemeine Java-Themen 8
H float Berechnung: Ergebnis ohne wissenschaftliche Notation Allgemeine Java-Themen 5
offi Excel mit Inhalten aus DB öffnen ohne zu speichern Allgemeine Java-Themen 8
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
S Java Plugin System (ohne OSGI) Allgemeine Java-Themen 10
G Array ohne Aufzählungszeichen ausgeben Allgemeine Java-Themen 6
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
A BufferedReader ohne System.in Allgemeine Java-Themen 9
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
B Applikation ohne (direkt)Java installiert zu haben auszuführen Allgemeine Java-Themen 8
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
OnDemand JavaMail ohne Anhang senden Allgemeine Java-Themen 4
N String ins Clipboard kopieren ohne makieren. Allgemeine Java-Themen 12
T Ziffernsumme ohne String Operatoren Allgemeine Java-Themen 4
E Threads Ausführung in Threads ist langsamer als ohne Threads Allgemeine Java-Themen 13
R NullPointerException Ohne Grund Allgemeine Java-Themen 5
RalleYTN JPEG mit CMYK(ohne JAI oder TwelveMonkeys!) Allgemeine Java-Themen 0
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
Y String to Double ohne ParseDouble Allgemeine Java-Themen 11
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
A Linux: Native Library mit Rootrechten ohne Prozess mit sudo zu starten Allgemeine Java-Themen 1
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
A Konstrukt ohne Main für Xml-Parser Allgemeine Java-Themen 1
S Performante Visualisierung groẞer Datenmengen (ohne JFreeChart) Allgemeine Java-Themen 22
M Permutation ohne Wiederholung mit rekursion Allgemeine Java-Themen 4
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
F File.listFiles ohne .sort Allgemeine Java-Themen 6
H Unicode ausgeben ohne Umwandlung - geht das? Allgemeine Java-Themen 3
L iText PDF-Generierung ohne Speichern Allgemeine Java-Themen 10
R Wie schaffe ich es, dass java zB 100 zählt ohne ständig "else if" hinschreiben zu müssen? Allgemeine Java-Themen 7
T Zwei Wortendungen vergleichen ohne .equals Allgemeine Java-Themen 10
J Array ohne vorher festgelegte Länge oder Wie wandle ich Zahlen in Zahlen mit anderen Basen um? Allgemeine Java-Themen 6
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
T Programm bleibt ohne Fehler stehen Allgemeine Java-Themen 4
J log4j ohne propertiedatei Allgemeine Java-Themen 4
D Classloader ohne Package Allgemeine Java-Themen 10
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
K print() geht nicht ohne println() Allgemeine Java-Themen 3
S KeyListener ohne Focus - Wie? Allgemeine Java-Themen 2
Rudolf JUnit4-Testklasse erweitern ohne zu vererben Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben