O matrice este o structură de date utilizată pentru a stoca date de același tip. Tablourile își stochează elementele în locații de memorie contigue.
În Java, tablourile sunt obiecte. Toate metodele obiectului de clasă pot fi invocate într-o matrice. Putem stoca un număr fix de elemente într-o matrice.
Să declarăm un tip primitiv simplu de matrice:
int[] intArray = {2,5,46,12,34};
Acum să încercăm să-l imprimăm cu System.out.println()
metodă:
System.out.println (intArray); // ieșire: [I@74a14482
Why did Java not print our array? What is happening under the hood?
The System.out.println()
method converts the object we passed into a string by calling String.valueOf()
. If we look at the String.valueOf()
method’s implementation, we’ll see this:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
If the passed-in object is null
it returns null, else it calls obj.toString()
. Eventually, System.out.println()
calls toString()
to print the output.
If that object’s class does not override Object.toString()
‘s implementation, it will call the Object.toString()
method.
Object.toString()
returns getClass().getName()+‘@’+Integer.toHexString(hashCode())
. In simple terms, it returns: “class name @ object’s hash code”.
In our previous output [I@74a14482
, the [
states that this is an array, and I
stands for int (the type of the array). 74a14482
is the unsigned hexadecimal representation of the hash code of the array.
Whenever we are creating our own custom classes, it is a best practice to override the Object.toString()
method.
We can not print arrays in Java using a plain System.out.println()
method. Instead, these are the following ways we can print an array:
- Loops: for loop and for-each loop
-
Arrays.toString()
method -
Arrays.deepToString()
method -
Arrays.asList()
method - Java Iterator interface
- Java Stream API
Let’s see them one by one.
1. Loops: for loop and for-each loop
Here’s an example of a for loop:
int[] intArray = {2,5,46,12,34}; for (int i = 0; i
Toate clasele de împachetare suprascriu Object.toString()
și returnează o reprezentare șir a valorii lor.
Iată o buclă pentru fiecare:
int[] intArray = {2,5,46,12,34};
for(int i: intArray){
System.out.print(i);
// output: 25461234
}
2. Metoda Arrays.toString ()
Arrays.toString()
este o metodă statică a clasei matrice care aparține java.util
pachet. Returnează o reprezentare în șir a conținutului matricei specificate. Putem imprima matrici unidimensionale folosind această metodă.
Elementele matrice sunt convertite în șiruri folosind String.valueOf()
metoda, ca aceasta:
int[] intArray = {2,5,46,12,34};
System.out.println(Arrays.toString(intArray));
// output: [2, 5, 46, 12, 34]
Pentru un tip de referință de matrice, trebuie să ne asigurăm că clasa de tip de referință înlocuiește Object.toString()
metodă.
De exemplu:
public class Test {
public static void main(String[] args) {
Student[] students = {new Student("John"), new Student("Doe")};
System.out.println(Arrays.toString(students));
// output: [Student{name="John"}, Student{name="Doe"}]
}
}
class Student {
private String name;
public Student(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" + "name="" + name + "'' + '}';
}
}
Această metodă nu este adecvată pentru tablourile multidimensionale. Convertește matrice multidimensionale în șiruri folosind Object.toString()
care descrie mai degrabă identitatea lor decât conținutul lor.
De exemplu:
// creating multidimensional array
int[][] multiDimensionalArr = { {2,3}, {5,9} };
System.out.println(Arrays.toString(multiDimensionalArr));
// output: [[I@74a14482, [I@1540e19d]
Cu ajutorul Arrays.deepToString()
, putem imprima matrice multidimensionale.
3. Metoda Arrays.deepToString ()
Arrays.deepToString()
returnează o reprezentare în șir a „conținutului profund” al matricei specificate.
Dacă un element este o matrice de tip primitiv, acesta este convertit într-un șir invocând supraîncărcarea corespunzătoare a Arrays.toString()
.
Iată un exemplu al tipului primitiv de matrice multidimensională:
// creating multidimensional array
int[][] multiDimensionalArr = { {2,3}, {5,9} };
System.out.println(Arrays.deepToString(multiDimensionalArr));
// output: [[2, 3], [5, 9]]
Dacă un element este o matrice de tip referință, acesta este convertit într-un șir invocând Arrays.deepToString()
recursiv.
Teacher[][] teachers =
{{ new Teacher("John"), new Teacher("David") }, {new Teacher("Mary")} };
System.out.println(Arrays.deepToString(teachers));
// output:
[[Teacher{name="John"}, Teacher{name="David"}],[Teacher{name="Mary"}]]
Trebuie să trecem peste Object.toString()
în clasa noastră de Profesori.
Dacă sunteți curioși cu privire la modul în care recursiv, aici este cod sursa pentru Arrays.deepToString()
metodă.
NOTĂ: De asemenea, tablourile unidimensionale de tip referință pot fi imprimate folosind această metodă. De exemplu:
Integer[] oneDimensionalArr = {1,4,7};
System.out.println(Arrays.deepToString(oneDimensionalArr));
// output: [1, 4, 7]
4. Metoda Arrays.asList ()
Această metodă returnează o listă de dimensiuni fixe, susținută de matricea specificată.
Integer[] intArray = {2,5,46,12,34};
System.out.println(Arrays.asList(intArray));
// output: [2, 5, 46, 12, 34]
Am schimbat tipul în Integer din int, deoarece List este o colecție care conține o listă de obiecte. Când convertim o matrice într-o listă, aceasta ar trebui să fie o matrice de tip referință.
Apeluri Java Arrays.asList(intArray).toString()
. Această tehnică utilizează intern toString()
metoda tipului de elemente din listă.
Un alt exemplu cu clasa noastră personalizată de profesor:
Teacher[] teacher = { new Teacher("John"), new Teacher("Mary") };
System.out.println(Arrays.asList(teacher));
// output: [Teacher{name="John"}, Teacher{name="Mary"}]
NOTĂ: Nu putem imprima tablouri multidimensionale folosind această metodă. De exemplu:
Teacher[][] teachers =
{{ new Teacher("John"), new Teacher("David") }, { new Teacher("Mary") }};
System.out.println(Arrays.asList(teachers));
// output: [[Lcom.thano.article.printarray.Teacher;@1540e19d, [Lcom.thano.article.printarray.Teacher;@677327b6]
5. Interfața Iterator Java
Similar cu o buclă pentru fiecare, putem folosi interfața Iterator pentru a parcurge elemente de matrice și a le imprima.
Obiectul Iterator poate fi creat prin invocarea iterator()
metodă pe o colecție. Acel obiect va fi folosit pentru a itera asupra elementelor respectivei Colecții.
Iată un exemplu despre modul în care putem imprima o matrice utilizând interfața Iterator:
Integer[] intArray = {2,5,46,12,34};
// creating a List of Integer
List<Integer> list = Arrays.asList(intArray);
// creating an iterator of Integer List
Iterator<Integer> it = list.iterator();
// if List has elements to be iterated
while(it.hasNext()) {
System.out.print(it.next());
// output: 25461234
}
6. API Java Stream
API-ul Stream este utilizat pentru a procesa colecții de obiecte. Un flux este o secvență de obiecte. Fluxurile nu modifică structura de date originală, ci furnizează rezultatul doar conform operațiunilor solicitate.
Cu ajutorul forEach()
operațiunea terminalului o putem itera prin fiecare element al fluxului.
De exemplu:
Integer[] intArray = {2,5,46,12,34};
Arrays.stream(intArray).forEach(System.out::print);
// output: 25461234
Acum știm cum să imprimăm o matrice în Java.
Mulțumesc că ai citit.
Imagine de copertă de Aziz Acharki pe Unsplash.
Puteți citi celelalte articole ale mele pe Mediu.
Codificare fericită!