/ / Objektová matica reťazcov na maticové reťazce v

Objektová matica strún do maticových reťazcov v java - java, matica

Som nový programátor java a matica Objects, ktoré môžem ľahko prenášať pomocou dvoch pre slučky týmto spôsobom

String[][] data = new String[objData.length][objData[0].length];
for (int nRow = 0; nRow < objData.length; nRow++){
for (int nCol = 0; nCol < objData[0].length; nCol++){
data[nRow][nCol] = (String) objData[nRow][nCol];
}
}

Zaujímalo by ma, či sa dá programovať lepšie. Snažil som sa použiť Arrays.copyOf alebo niečo podobné, ako je toto

String[][] data = Arrays.copyOf(objData, objData.length*objData[0].length, String[][].class);

ale toto mi dáva výnimku ...

na java.util.Arrays.copyOf (neznámy zdroj)

Vopred ďakujem!

odpovede:

1 pre odpoveď č. 1

Jediný spôsob, ako kopírovať polia, je viacefektívnejší ako pre () kódovanie slučky je System.arraycopy (). Funguje to pomocou hovoru na nízkej úrovni - niečo ako Memcopy v C. Malo by to fungovať, ak odovzdáte správne argumenty.

Ale rád by som vám niečo odporučil. Nevytvárajte tak ťažko zrozumiteľné štruktúry. Pravdepodobne som vytvoril 2-rozmerné pole v jave 2 alebo 3 krát za posledných 12 rokov. Ak sú vaše údaje zložité, vytvorte triedu, ktorá obsahuje tieto údaje, a potom vytvorte kolekciu alebo pole, ktoré obsahuje prvky tejto triedy.


0 pre odpoveď č. 2

Ak sú zdrojové a cieľové pole rôzneho typu, potom je váš kód správnym prístupom: vytvorte nové cieľové pole a skopírujte a skonvertujte všetky položky zo zdrojového poľa na cieľové bunky.

Iné metódy (napr Array.copyof()) urobia to isté, možno o niečo rýchlejšie, pretože môžu mať svoje rutiny implementované v natívnom kóde. Ale komplexnosť je O(m*n) v každom prípade.

Aby ste upravili kód: posuňte algoritmus statickou pomocnou metódou v niektorej triede utilít, napr

 public static String[][] convertToStringMatrix(Object[][] source) { ... }