Comment changer la taille d’un tableau?
Comment Pouvez-vous modifier la taille d’un tableau?
La réponse est un non. En Java, vous ne pouvez pas modifier la taille d’un arrangement.
Mais avant d’expliquer pourquoi, nous devons être clairs que cela signifie de modifier la taille d’un arrangement.
regardons L’image suivante:
Source: https://overiq.com/c-programming-101/the-realloc-function-in-c/
dans l’image que nous avoir au début un arrangement de 5 éléments de type integer
Mais vous voulez augmenter 6 espaces de mémoire dans l’arrangement. Ensuite, modifiez la taille d’un tableau signifie simplement augmenter ou diminuer le nombre d’espaces de mémoire qu’un arrangement a. Dans notre bloc de mémoire en amont, la taille de la matrice de à 11
éléments, cependant, le même bloc sera préservé de mémoire à la fois. Comme après le dernier élément d’arrangement, il n’y a pas d’espace mémoire occupé, car si cela se produit, un nouveau bloc de mémoire doit être réservé, puis les éléments de l’ancien bloc doivent être copiés sur le nouveau.
Déjà ,. .. Pour les rayons que j’ai mentionnés tout ce qui précède?
Pourquoi atteindre la taille d’un arrangement est nécessaire une fonction / une routine pouvant augmenter ou diminuer la quantité d’éléments d’un bloc de mémoire. En Java, il n’y a pas de tel méthode, cependant, dans d’autres langages de programmation en tant que langue C, si vous avez une telle fonction et s’appelle réalloc.
Pourquoi ne pouvez pas modifier la taille d’un tableau?
Pourquoi ne pas avoir une fonction comme RELALELOC, sinon, si un arrangement pourrait être redimensionné.
Je souligne également que beaucoup de gens croient que le redimensionnement signifie créer un nouvel arrangement et copier le Les éléments de l’arrangement précédent dans le nouveau, cependant, qui est incorrect. Un excellent exemple est la méthode redimensionnée de C #, tout le monde penserait qu’il redimensionne un arrangement, mais en réalité ce n’est pas comme ça, il fait la même procédure que j’avais mentionnée ci-dessus. Le nom de la méthode est trompeur.
redimensionne un moyen d’agencement modifiant la taille de la disposition mais préservant le même bloc de mémoire (où les éléments de matrice sont hébergés).
maintenant, un Solution simple pour pouvoir enregistrer des noms d’inéviches de personnes de la taille de l’arrangement, il utilise la classe ArrayList et, de cette manière, vous pouvez créer une liste de type .
.
Par exemple:
public class Program { public static void main(String args) { Scanner sc = new Scanner(System.in); String namePerson; List<String> listPerson = new ArrayList<String>(); int op; do { System.out.println("Ingrese un nombre:"); namePerson = sc.nextLine(); listPerson.add(namePerson); System.out.println("Desea salir? Presione (-1)"); op = sc.nextInt(); sc.nextLine();//para limpiar el buffer stdin if(op == -1) break; }while(true); for(int i = 0; i != listPerson.size(); ++i) { System.out.println(listPerson.get(i)); } }}
Classe ArrayList
Mise en place via un arrangement vectoriel / dynamique, cela signifie que cela signifie , que lorsque vous créez un objet de type ArrayList
:
effectivement le constructeur de ce type. Pour créer l’arrangement dynamique avec une capacité initiale (code source ArrayList) de 10
éléments, cela nous dit que, en interne, cette classe a la référence d’un arrangement pour x éléments, mais il n’a pas tout Référence d’un objet (pour cette raison si la méthode taille () sera exécutée, il devrait aboutir à 0
éléments).
Cependant, la classe ArrayList
n’augmente pas la taille de l’agencement dynamique où les références de chaque objet sont stockées, par conséquent, lorsque le nombre d’objets dépasse la capacité maximale de la liste, que se passera-t-il Soyez réservé à un nouvel arrangement, dans lequel les éléments de l’ancien bloc seront copiés dans le nouveau bloc de mémoire.
Donc, si votre professeur ne vous permettra pas d’utiliser la classe , vous pouvez créer votre propre classe dans laquelle il est responsable de l’émission de la mise en œuvre d’un ArrayList
.
Par exemple:
class ArrayPerson{ private String person; private int capacity; private int count; public ArrayPerson() { person = new String; capacity = 10; } public ArrayPerson(int capacity) { this.capacity = capacity; person = new String; } //Obtiene la cantidad actual de objetos reservados en el arreglo public int getCount() { return count; } //Para obtener la referencia donde está el arreglo por completo public String getPersons() { return person; } //Para obtener la referencia de X objeto de tipo String del mismo arreglo public String getPerson(int index) { return person; } //Inserta una referencia de un objeto de tipo String en el arreglo public void add(String refPerson) { ++count; if(count > capacity) { capacity += 10; person = Arrays.copyOf(person, capacity); } person = refPerson; }}
Fondamentalement cette classe lorsque vous vous permettriez d’exécuter un constructeur paramétré ou par défaut.
Si nous exécutons le constructeur paramétré :
- créera Un agencement d’objets avec une taille qui dépendra de la valeur du paramètre du constructeur.
Si nous exécutons le constructeur par défaut (sans paramètres):
- Créera un arrangement d’objet avec une taille par défaut (avec une capacité initiale maximale de
10
éléments).
vient la partie la plus intéressante, le Méthode add
.Cette méthode sera essentiellement responsable de l’ajout d’une référence (adresse de mémoire) en position X de la matrice d’objet, toutefois, lorsque le nombre d’objets dépasse la capacité de capacité maximale, une nouvelle capacité sera calculée et la copie de la classe de la classe Arrays
et quelle est cette méthode consiste à réserver la mémoire pour un nouvel arrangement d’objets, dans lequel il copiera les éléments de l’ancien bloc dans le nouveau bloc de mémoire et que cette méthode renvoie c’est le Référence d’un objet de type String
dans lequel la référence des objets (avec une taille d’élément mis à jour) sera en interne.
La forme à utiliser cette classe serait être de cette façon:
public class Program { public static void main(String args) { Scanner sc = new Scanner(System.in); String namePerson; //Instaciamos la clase ArrayPerson ArrayPerson ap = new ArrayPerson(); int op; do { System.out.println("Ingrese un nombre:"); namePerson = sc.nextLine(); //Añadimos la referencia del objeto al arreglo ap.add(namePerson); System.out.println("Desea salir? Presione (-1)"); op = sc.nextInt(); sc.nextLine();//para limpiar el buffer stdin if(op == -1) break; }while(true); //Recorremos el arreglo con los elementos que tenga registrado el arreglo for(int i = 0; i != ap.getCount(); ++i) { System.out.println(ap.getPerson(i)); } }}
Conclusion:
en Java, vous ne pouvez pas augmenter la taille de l’arrangement, mais si vous pouvez réserver la mémoire Pour un nouveau bloc de mémoire dans lequel nous copions les éléments de l’ancien bloc dans le nouveau bloc et de ne pas faire Ou la même procédure à chaque fois que vous souhaitez insérer un nouvel élément dans l’arrangement, nous le faisons lorsque la quantité d’éléments dépasse la capacité maximale du tableau (comme la classe indique ArrayList
).
Recommandation:
Il est toujours bon d’utiliser les cours qui appartiennent à l’API Java, car cela permet d’économiser des travaux à des fins académiques, il ne serait pas faux de mettre en œuvre vos propres cours.