En effet, il est dès fois plus efficace lorsque l'on a des objets
comme des personnes qui ont un
id et un
salary (salaire)
de représenter ceux-ci nom pas comme des lignes, mais comme des colonnes,
car on évite les problèmes d'alignements.
Par exemple, si on a trois personnes,
id salary
-- ------
12 1000
14 1250
17 2045
en mémoire, on peut les représenter par deux tableaux, un tableau d'int (
int[])
avec les valeurs 12, 14 et 17 et un tableau de long (
long[])
avec les valeurs 1000, 1250 et 2045 plutôt que comme un tableau de records
ayant les composants (
id et
salary).
Cette technique est très utilisé dans les jeus vidéos sous le nom struct of array (SOA)
et dans la base de données relationnelles (sous le nom de bases orientées colonnes).
Voici trois exemples d'utilisation des méthodes de la classe
Columnar
// Example with a list of primitive
List<Integer> intList = Columnar.primitiveList(5, int.class);
for (int i = 0; i < intList.size(); i++) {
intList.set(i, i * 10);
}
System.out.println("Liste d'entiers: " + intList);
// Example with a record
public record Person(int age, long salary) {}
List<Person> personList = Columnar.recordList(3, Person.class);
personList.set(0, new Person(28, 60_000L));
personList.set(1, new Person(35, 75_000L));
personList.set(2, new Person(42, 90_000L));
for (Person person : personList) {
System.out.println(person.age() + " " + person.salary());
}
// Example with an interface containing getters and setters
public interface Employee {
int getAge();
void setAge(int age);
long getSalary();
void setSalary(long salary);
}
List<Employee> employeeList = Columnar.proxyList(3, Employee.class);
Employee john = employeeList.get(0);
john.setAge(31);
john.setSalary(65000.0);
Employee ana = employeeList.get(1);
ana.setAge(27);
ana.setSalary(58000.0);
for (int i = 0; i < employeeList.size(); i++) {
Employee employee = employeeList.get(i);
System.out.printf(employee.getAge() + " " + employee.getSalary());
}
La javadoc 23 est
https://igm.univ-mlv.fr/~juge/javadoc-23/.
Les trucs et astuces utilisés pour l'implantation
COMPANION.pdf
La classe
Utils qui gère les exceptions correctement est la suivante
Utils.java
Les tests unitaires correspondant à l'examen se trouvent dans la classe
ColumnarTest.java
Note : comme on utilise les tests unitaires JUnit sans Maven, dans la configuration de votre projet, il faut ajouter
la librairie JUnit 5, soit à partir du fichier
ColumnarTest.java, en cliquant sur l'annotation
@Test et en sélectionnant le quickfix "Fixup project ...", soit en sélectionnant les "Properties" du projet
(avec le bouton droit de la souris sur le projet) puis en ajoutant la librairie JUnit 5 (jupiter) au ClassPath.