Tweedimensionale matrixlijst

Ik heb gehoord over het gebruik van een tweedimensionale array zoals deze:

String[][] strArr;

Maar is er een manier om dit te doen met een lijst?

Misschien zoiets?

ArrayList<String><String> strList;

En gebruik je zoiets als dit om eraan toe te voegen?

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

Is er een manier om zoiets te doen? Alle hulp wordt op prijs gesteld.

Het zou goed zijn als dat zo is, omdat ik momenteel strings in twee verschillende ArrayList’s in paren aan het zetten ben.


Antwoord 1, autoriteit 100%

U zou gebruiken

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

En toen je een nieuwe “rij” moest toevoegen, zou je de lijst toevoegen:

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

Ik heb dit meestal gebruikt wanneer ik verwijzingen naar verschillende lijsten van Point in een GUI wilde hebben, zodat ik meerdere curven kon tekenen. Het werkt goed.

Bijvoorbeeld:

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();
         }
      });
   }
}

Antwoord 2, autoriteit 21%

U kunt een lijst maken,

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

en voeg er zo andere lijsten aan toe:

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

Je kunt nu de dubbele lus hieronder gebruiken om alles in alle lijsten weer te geven

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");
}

Antwoord 3, autoriteit 13%

Een 2D-array is gewoon een array van arrays. De analogie voor lijsten is gewoon een Listvan Lists.

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

Ik geef toe, het is geen mooie oplossing, vooral niet als je voor een driedimensionale structuur gaat.


Antwoord 4, autoriteit 4%

Een tweedimensionale ArrayList declareren:

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

Of

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

Of

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

Al het bovenstaande zijn geldige verklaringen voor een tweedimensionale ArrayList!

Nu, een eendimensionale ArrayList declareren:

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

Waarden invoegen in de tweedimensionale ArrayList:

for(int i=0; i<5; i++){
    ArrayList<String> row = new ArrayList<>();
    for(int j=0; j<5; j++){
        row.add("Add values here"); 
    }
    rows.add(row); 
}

de waarden ophalen uit de tweedimensionale ArrayList:

for(int i=0; i<5; i++){
    for(int j=0; j<5; j++){
        System.out.print(rows.get(i).get(j)+" ");
     }
     System.out.println("");
}

Antwoord 5, autoriteit 3%

Als uw platformmatrix Java 7 ondersteunt, kunt u deze gebruiken zoals hieronder

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

Antwoord 6, autoriteit 3%

In feite is een tweedimensionale array de lijst met X, waarbij Xeen van uw gegevensstructuren is, van typische tot door de gebruiker gedefinieerde. Als de volgende snapshot-code heb ik rij voor rij toegevoegd aan een array triangle. Om elke rij te maken, heb ik de methode addgebruikt om handmatig elementen toe te voegen of de methode asListom een lijst te maken van een gegevensband.

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));
}
}

Als de steekproef wordt uitgevoerd, wordt de uitvoer gegenereerd:

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

Antwoord 7

Ik weet dat dit een oude vraag is met goede antwoorden, maar ik geloof dat ik er mijn 2 cent aan toe kan voegen.

De eenvoudigste en meest flexibele manier die voor mij werkt, is door gewoon een bijna “Plain and Old Java Object” class2D te gebruiken om elke “rij” van uw array te maken.

Het onderstaande voorbeeld heeft enige uitleg en is uitvoerbaar (je kunt het kopiëren en plakken, maar vergeet niet de pakketnaam te controleren):

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;
    }
}

UPDATE– Om de vraag van @Mohammed Akhtar Zuberi te beantwoorden, heb ik de vereenvoudigde versie van het programma gemaakt, zodat de resultaten gemakkelijker kunnen worden weergegeven.

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("First\t Last\tAge");
        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;
    }
}

De bovenstaande code levert het volgende resultaat op (ik heb het uitgevoerd op NetBeans):

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

Antwoord 8

Hier leest u hoe u een 2D-multidimensionale array maakt en afdrukt met behulp van het ArrayList-object.

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");
    }
}

Antwoord 9

for (Project project : listOfLists) {
    String nama_project = project.getNama_project();
    if (project.getModelproject().size() > 1) {
        for (int i = 1; i < project.getModelproject().size(); i++) {
            DataModel model = project.getModelproject().get(i);
            int id_laporan = model.getId();
            String detail_pekerjaan = model.getAlamat();
        }
    }
}

Other episodes