Zweidimensionale Array-Liste

Lesezeit: 8 Minuten

Zweidimensionale Array Liste
FabianCook

Ich habe von der Verwendung eines zweidimensionalen Arrays wie diesem gehört:

String[][] strArr;

Aber gibt es eine Möglichkeit, dies mit einer Liste zu tun?

Vielleicht sowas?

ArrayList<String><String> strList;

Und so etwas hinzufügen, um es zu ergänzen?

strList.add("hey", "hey");

Gibt es eine Möglichkeit, so etwas zu tun? Jede Hilfe geschätzt.

Es wäre gut, wenn dies der Fall ist, da ich derzeit Strings paarweise in zwei verschiedene ArrayLists lege.

1641762338 745 Zweidimensionale Array Liste
Hovercraft voller Aale

Du würdest verwenden

List<List<String>> listOfLists = new ArrayList<List<String>>();

Und wenn Sie dann eine neue “Zeile” hinzufügen mussten, fügen Sie die Liste hinzu:

listOfLists.add(new ArrayList<String>());

Ich habe dies hauptsächlich verwendet, wenn ich Verweise auf mehrere Listen von Point in einer GUI speichern wollte, damit ich mehrere Kurven zeichnen konnte. Es funktioniert gut.

Beispielsweise:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

@SuppressWarnings("serial")
public class DrawStuff extends JPanel {
   private static final int PREF_W = 400;
   private static final int PREF_H = PREF_W;
   private static final Color POINTS_COLOR = Color.red;
   private static final Color CURRENT_POINTS_COLOR = Color.blue;
   private static final Stroke STROKE = new BasicStroke(4f);
   private List<List<Point>> pointsList = new ArrayList<List<Point>>();
   private List<Point> currentPointList = null;

   public DrawStuff() {
      MyMouseAdapter myMouseAdapter = new MyMouseAdapter();
      addMouseListener(myMouseAdapter);
      addMouseMotionListener(myMouseAdapter);
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(PREF_W, PREF_H);
   }

   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
            RenderingHints.VALUE_ANTIALIAS_ON);
      g2.setStroke(STROKE);
      g.setColor(POINTS_COLOR);
      for (List<Point> pointList : pointsList) {
         if (pointList.size() > 1) {
            Point p1 = pointList.get(0);
            for (int i = 1; i < pointList.size(); i++) {
               Point p2 = pointList.get(i);
               int x1 = p1.x;
               int y1 = p1.y;
               int x2 = p2.x;
               int y2 = p2.y;
               g.drawLine(x1, y1, x2, y2);
               p1 = p2;
            }
         }
      }
      g.setColor(CURRENT_POINTS_COLOR);
      if (currentPointList != null && currentPointList.size() > 1) {
         Point p1 = currentPointList.get(0);
         for (int i = 1; i < currentPointList.size(); i++) {
            Point p2 = currentPointList.get(i);
            int x1 = p1.x;
            int y1 = p1.y;
            int x2 = p2.x;
            int y2 = p2.y;
            g.drawLine(x1, y1, x2, y2);
            p1 = p2;
         }
      }
   }

   private class MyMouseAdapter extends MouseAdapter {
      @Override
      public void mousePressed(MouseEvent mEvt) {
         currentPointList = new ArrayList<Point>();
         currentPointList.add(mEvt.getPoint());
         repaint();
      }

      @Override
      public void mouseDragged(MouseEvent mEvt) {
         currentPointList.add(mEvt.getPoint());
         repaint();
      }

      @Override
      public void mouseReleased(MouseEvent mEvt) {
         currentPointList.add(mEvt.getPoint());
         pointsList.add(currentPointList);
         currentPointList = null;
         repaint();
      }
   }

   private static void createAndShowGui() {
      JFrame frame = new JFrame("DrawStuff");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new DrawStuff());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

  • Wenn Sie also die Zeichenfolge daraus abrufen möchten, verwenden Sie einfach diese Liste von listOfLists.getIndex(0).getIndex(0);?

    – FabianCook

    2. Juni ’12 um 21:54

  • @Smart: würdest du verwenden listOfLists.get(index1).get(index2)

    – Hovercraft voller Aale

    2. Juni ’12 um 21:54

  • @Smart: Danke. Siehe auch Bearbeiten für eine mögliche Verwendung dieser Struktur.

    – Hovercraft voller Aale

    2. Juni ’12 um 22:07

  • Zu viel Beispielcode; vielleicht, wenn es für die Frage direkter relevant wäre?

    – Dave Newton

    2. Juni ’12 um 22:07

  • @Dave: dein Kommentar hat seine Berechtigung. Lassen Sie mich ein wenig darüber nachdenken.

    – Hovercraft voller Aale

    2. Juni ’12 um 22:10

Zweidimensionale Array Liste
Benutzer3606336

Sie können eine Liste erstellen,

ArrayList<String[]> outerArr = new ArrayList<String[]>(); 

und fügen Sie andere Listen wie folgt hinzu:

String[] myString1= {"hey","hey","hey","hey"};  
outerArr .add(myString1);
String[] myString2= {"you","you","you","you"};
outerArr .add(myString2);

Jetzt können Sie die Doppelschleife unten verwenden, um alles in allen Listen anzuzeigen

for(int i=0;i<outerArr.size();i++){

   String[] myString= new String[4]; 
   myString=outerArr.get(i);
   for(int j=0;j<myString.length;j++){
      System.out.print(myString[j]); 
   }
   System.out.print("n");

}

Ein 2D-Array ist einfach ein Array von Arrays. Das Analogon für Listen ist einfach a List von ListS.

ArrayList<ArrayList<String>> myList = new ArrayList<ArrayList<String>>();

Ich gebe zu, es ist keine schöne Lösung, besonders wenn Sie sich für eine dreidimensionale oder mehrdimensionale Struktur entscheiden.

  • Sie könnten 3 von 4 ArrayList durch List ersetzen.

    – Assylie

    2. Juni ’12 um 21:54

  • List<List<String>> myList = new ArrayList<List<String>>(); // program to interfaces, not implementations stackoverflow.com/questions/2697783/…

    – Ahmet

    18. Juni ’19 um 16:04

1641762339 118 Zweidimensionale Array Liste
David Mathias

Wenn Ihre Plattformmatrix Java 7 unterstützt, können Sie wie folgt verwenden

List<List<String>> myList = new ArrayList<>();

Tatsächlich ist das 2-dimensionale Array die Liste der Liste von X, wo X ist eine Ihrer Datenstrukturen von typischen bis zu benutzerdefinierten. Als folgenden Snapshot-Code habe ich Zeile für Zeile in ein Array eingefügt triangle. Um jede Zeile zu erstellen, habe ich die Methode verwendet add Elemente manuell hinzufügen oder die Methode asList um eine Liste aus einem Datenband zu erstellen.

package algorithms;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RunDemo {

/**
 * @param args
 */
public static void main(String[] args) {
    // Get n
    List<List<Integer>> triangle = new ArrayList<List<Integer>>();

    List<Integer> row1 = new ArrayList<Integer>(1);
    row1.add(2);
    triangle.add(row1);

    List<Integer> row2 = new ArrayList<Integer>(2);
    row2.add(3);row2.add(4);
    triangle.add(row2);

    triangle.add(Arrays.asList(6,5,7));
    triangle.add(Arrays.asList(4,1,8,3));

    System.out.println("Size = "+ triangle.size());
    for (int i=0; i<triangle.size();i++)
        System.out.println(triangle.get(i));

}
}

Beim Ausführen des Beispiels wird die Ausgabe generiert:

Size = 4
[2]
[3, 4]
[6, 5, 7]
[4, 1, 8, 3]

Ich weiß, das ist eine alte Frage mit guten Antworten, aber ich glaube, ich kann meine 2 Cent hinzufügen.

Der einfachste und flexibelste Weg, der für mich funktioniert, besteht darin, jede “Zeile” Ihres Arrays mit einem fast “einfachen und alten Java-Objekt” class2D zu erstellen.

Das folgende Beispiel enthält einige Erklärungen und ist ausführbar (Sie können es kopieren und einfügen, aber denken Sie daran, den Paketnamen zu überprüfen):

package my2darraylist;

import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;

public class My2DArrayList
{
    public static void main(String[] args)
    {
        // This is your "2D" ArrayList
        // 
        List<Box> boxes = new ArrayList<>();

        // Add your stuff
        //
        Box stuff = new Box();
        stuff.setAString( "This is my stuff");
        stuff.addString("My Stuff 01");
        stuff.addInteger( 1 );
        boxes.add( stuff );

        // Add other stuff
        //
        Box otherStuff = new Box();
        otherStuff.setAString( "This is my other stuff");
        otherStuff.addString("My Other Stuff 01");
        otherStuff.addInteger( 1 );
        otherStuff.addString("My Other Stuff 02");
        otherStuff.addInteger( 2 );
        boxes.add( otherStuff );

        // List the whole thing
        for ( Box box : boxes)
        {
            System.out.println( box.getAString() );
            System.out.println( box.getMyStrings().size() );
            System.out.println( box.getMyIntegers().size() );
        }
    }

}

class Box
{
    // Each attribute is a "Column" in you array
    //    
    private String aString;
    private List<String> myStrings = new ArrayList<>() ;
    private List<Integer> myIntegers = new ArrayList<>();
    // Use your imagination...
    //
    private JPanel jpanel;

    public void addString( String s )
    {
        myStrings.add( s );
    }

    public void addInteger( int i )
    {
        myIntegers.add( i );
    }

    // Getters & Setters

    public String getAString()
    {
        return aString;
    }

    public void setAString(String aString)
    {
        this.aString = aString;
    }

    public List<String> getMyStrings()
    {
        return myStrings;
    }

    public void setMyStrings(List<String> myStrings)
    {
        this.myStrings = myStrings;
    }

    public List<Integer> getMyIntegers()
    {
        return myIntegers;
    }

    public void setMyIntegers(List<Integer> myIntegers)
    {
        this.myIntegers = myIntegers;
    }

    public JPanel getJpanel()
    {
        return jpanel;
    }

    public void setJpanel(JPanel jpanel)
    {
        this.jpanel = jpanel;
    }
}

AKTUALISIEREN – Um die Frage von @Mohammed Akhtar Zuberi zu beantworten, habe ich die vereinfachte Version des Programms erstellt, um die Anzeige der Ergebnisse zu erleichtern.

import java.util.ArrayList;

public class My2DArrayListSimplified
{

    public static void main(String[] args)
    {
        ArrayList<Row> rows = new ArrayList<>();
        Row row;
        // Insert the columns for each row
        //             First Name, Last Name, Age
        row = new Row("John",      "Doe",     30);
        rows.add(row);
        row = new Row("Jane",      "Doe",     29);
        rows.add(row);
        row = new Row("Mary",      "Doe",      1);
        rows.add(row);

        // Show the Array
        //
        System.out.println("Firstt LasttAge");
        System.out.println("----------------------");
        for (Row printRow : rows)
        {
            System.out.println(
                    printRow.getFirstName() + "t " +
                    printRow.getLastName() + "t" +
                    printRow.getAge());

        }
    }

}

class Row
{

    // REMEMBER: each attribute is a column
    //
    private final String firstName;
    private final String lastName;
    private final int age;

    public Row(String firstName, String lastName, int age)
    {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getFirstName()
    {
        return firstName;
    }

    public String getLastName()
    {
        return lastName;
    }

    public int getAge()
    {
        return age;
    }

}

Der obige Code erzeugt das folgende Ergebnis (ich habe ihn auf NetBeans ausgeführt):

run:
First    Last   Age
----------------------
John     Doe    30
Jane     Doe    29
Mary     Doe    1
BUILD SUCCESSFUL (total time: 0 seconds)

1641762339 289 Zweidimensionale Array Liste
Gen

So erstellen und drucken Sie ein mehrdimensionales 2D-Array mit dem ArrayList-Objekt.

import java.util.ArrayList;

public class TwoD_ArrayListExample {
    static public ArrayList<ArrayList<String>> gameBoard = new ArrayList<ArrayList<String>>();

    public static void main(String[] args) {
        insertObjects();
        printTable(gameBoard);
    }

    public static void insertObjects() {
        for (int rowNum = 0; rowNum != 8; rowNum++) {
            ArrayList<String> oneRow = new ArrayList<String>();
            gameBoard.add(rowNum, oneRow);

            for (int columnNum = 0; columnNum != 8; columnNum++) {
                String description= "Description of Objects: row= "+ rowNum + ", column= "+ columnNum;
                    oneRow.add(columnNum, description);
            }
        }
    }

    // The printTable method prints the table to the console
    private static void printTable(ArrayList<ArrayList<String>> table) {
        for (int row = 0; row != 8; row++) {
            for (int col = 0; col != 8; col++) {
                System.out.println("Printing:               row= "+ row+ ", column= "+ col);
                System.out.println(table.get(row).get(col).toString());
            }
        }
        System.out.println("n");
    }
}

.

242820cookie-checkZweidimensionale Array-Liste

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy