Een Java-spreadsheetgegevensstructuur maken

Op het eenvoudigste niveau kunt u een gegevensstructuur voor een spreadsheet in Java maken met behulp van een eenvoudige 2D-array. Deze benadering laat echter veel te wensen over. Idealiter zou een spreadsheetgegevensstructuur in staat moeten zijn om op efficiënte wijze volledige rijen en kolommen te vergroten of verkleinen, in te voegen en te verwijderen, en deze bewerkingen zijn rekenkundig duur in een Java-array, waardoor Java de volledige gegevensstructuur achter de schermen opnieuw moet opbouwen, elke keer dat een dergelijke operatie wordt uitgevoerd.

In plaats daarvan zou je iets geavanceerder moeten gebruiken: een gelinkte lijst met gelinkte lijsten. Hierdoor kan het invoegen en verwijderen van rijen en kolommen en het vergroten/verkleinen van de tabel veel sneller gebeuren. Het brengt echter kleine prestatiekosten met zich mee als het tijd is om voor de beurt toegang te krijgen tot specifieke cellen van de spreadsheet.

Stap 1

Maak een nieuw Java-bestand en noem het "SpreadsheetStructure.java". Als je een favoriete Integrated Development Environment (IDE) hebt, kun je dit doen door op 'Bestand', 'Nieuwe klas' te klikken. U kunt ook Windows Kladblok openen door te klikken op "Start", "Alle programma's", "Accessoires", "Kladblok" en het bestand met die bestandsnaam op te slaan.

Stap 2

Maak uw klasseninterface door het volgende in het bestand te plakken dat u in stap 1 hebt gemaakt. De rest van de stappen zijn gewijd aan het invullen van de code voor elk van de methoden die in deze stap zijn gedefinieerd:

openbare klas Spreadsheet {

Gelinkte lijst data = nieuwe LinkedList(); public Spreadsheet() {} public void addRow() {} public void addRow(int index) {} public void removeRow(int index) {} public void removeColumn(int index) {} public void addColumn() {} public void addColumn (int index) {} public void setCell(int x, int y, String newData) {} public int getWidth() {} public int getHeight() {} public String toString() {} /** * Test de klasse, */ public static void main(String[] args) { } 

}

De basisgegevensstructuur is een LinkedList van rijen met daarin een LinkedList met kolommen. Hoewel een eenvoudige 2D-array eenvoudiger te implementeren zou zijn, zou het ook veel langzamer zijn voor veel algemene spreadsheetbewerkingen, met name het invoegen en verwijderen van rijen.

Stap 3

Plak de volgende code tussen de haakjes van de constructormethode, "Spreadsheet":

public Spreadsheet() { addRow(); addColumn(); } 

Dit zorgt er simpelweg voor dat we beginnen met ten minste een enkele rij en kolom.

Stap 4

Plak het volgende om de twee addRow-methoden in te vullen. De ene neemt geen argumenten en voegt automatisch de rij toe aan het einde van de spreadsheet, terwijl de andere de gebruiker in staat stelt te specificeren waar de rij moet worden toegevoegd:

public void addRow() { data.addLast (nieuwe LinkedList)()); for (int x = 0; x ()); for (int x = 0; x 

Stap 5

Plak de code om een ​​rij in je bronbestand te verwijderen:

public void removeRow(int index) { data.remove(index); } 

Stap 6

Plak de code voor de twee addColumn-methoden. Deze werken op dezelfde manier als de addRow-methoden: er zijn er twee, een voor het toevoegen van een kolom aan het einde van het blad en een voor het invoegen van een kolom in het midden:

public void addColumn() { for (LinkedList l: data) { l.addLast(new String()); } } public void addColumn(int index) { for (LinkedList l: data) { l.add(index, new String()); } } 

Stap 7

Plak de code voor het verwijderen van kolommen:

public void removeColumn(int index) { for (LinkedList l: data) { l.remove(index); } } 

Stap 8

Plak de code die de inhoud van een bepaalde cel instelt op een reeks gegevens:

public void setCell(int x, int y, String newData) { data.get(x).set(y, newData); } 

Stap 9

Vul de methoden in om de breedte en hoogte van de spreadsheet te krijgen:

public int getWidth() { retourneer data.getFirst().size(); } public int getHeight() { return data.size(); } 

Stap 10

Implementeer de toString-methode. Hiermee wordt een opgemaakte tekenreeks geretourneerd die in een tabel met rijen en kolommen de gegevens in de spreadsheet weergeeft:

public String toString() { String temp = ""; for (LinkedList l: data) { for (Object o: l) { String s = (String) o; if (s.equals("")) s = "-leeg-"; temp += s + " "; } tijdelijk += "\n"; } retourtemperatuur; } 

Plak de volgende hoofdmethode die de gegevensstructuur van de spreadsheet op de proef stelt en ervoor zorgt dat alles werkt zoals verwacht:

public static void main(String[] args) { Spreadsheet sheet = new Spreadsheet(); System.out.println(sheet.toString()); System.out.print(sheet.getWidth()); Systeem.uit.print(" x "); System.out.println(sheet.getHeight()); blad.addRow(); System.out.print(sheet.getWidth()); Systeem.uit.print(" x "); System.out.println(sheet.getHeight()); blad.setCell(0,0,"1"); blad.setCell(0,1,"2"); blad.setCell(1,0,"3"); blad.setCell(1,1,"4"); System.out.println(sheet.toString()); blad.addColumn(1); blad.setCell (1,0, "TEMP"); blad.setCell (1,1, "TEMP"); System.out.println(sheet.toString()); blad.verwijderRij(1); System.out.println(sheet.toString()); blad.verwijderKolom(1); System.out.println(sheet.toString()); }