J'ai un tableau de chaînes ( String[]) et je dois supprimer le premier élément. Comment puis-je faire cela efficacement?
J'ai un tableau de chaînes ( String[]) et je dois supprimer le premier élément. Comment puis-je faire cela efficacement?
Réponses:
La taille des tableaux en Java ne peut pas être modifiée. Donc, techniquement, vous ne pouvez supprimer aucun élément du tableau.
Une façon de simuler la suppression d'un élément du tableau consiste à créer un nouveau tableau plus petit, puis à copier tous les éléments du tableau d'origine dans le nouveau tableau plus petit.
String[] yourArray = Arrays.copyOfRange(oldArr, 1, oldArr.length);
Cependant , je ne suggérerais pas la méthode ci-dessus. Vous devriez vraiment utiliser un fichier List<String>. Les listes vous permettent d'ajouter et de supprimer des éléments de n'importe quel index. Cela ressemblerait à ce qui suit:
List<String> list = new ArrayList<String>(); // or LinkedList<String>();
list.add("Stuff");
// add lots of stuff
list.remove(0); // removes the first item
ArrayListest O (n).
ArrayList, mais pas pour LinkedList.
Arrays.copyOfRange()c'est pour API9 +
Le moyen le plus simple est probablement le suivant - vous devez essentiellement construire un nouveau tableau d'un élément plus petit, puis copier les éléments que vous souhaitez conserver aux bonnes positions.
int n=oldArray.length-1;
String[] newArray=new String[n];
System.arraycopy(oldArray,1,newArray,0,n);
Notez que si vous effectuez fréquemment ce type d'opération, cela pourrait être le signe que vous devriez en fait utiliser un autre type de structure de données, par exemple une liste chaînée. Construire un nouveau tableau à chaque fois est une opération O (n), qui pourrait coûter cher si votre tableau est grand. Une liste chaînée vous donnerait la suppression O (1) du premier élément.
Une autre idée consiste à ne pas supprimer du tout le premier élément, mais simplement à incrémenter un entier qui pointe vers le premier index utilisé. Les utilisateurs du réseau devront prendre en compte ce décalage, mais cela peut être une approche efficace. La classe Java String utilise en fait cette méthode en interne lors de la création de sous-chaînes.
Arrays.copyOfRange()est.
Vous ne pouvez pas le faire du tout, et encore moins rapidement. Les tableaux en Java sont de taille fixe. Deux choses que vous pourriez faire sont:
Vous pouvez utiliser System.arraycopypour l'un ou l'autre. Ces deux éléments sont O (n), car ils copient tous les éléments sauf 1.
Si vous supprimez souvent le premier élément, envisagez d'utiliser à la LinkedListplace. Vous pouvez utiliser LinkedList.remove, qui provient de l' Queueinterface, pour plus de commodité. Avec LinkedList, la suppression du premier élément est O (1). En fait, supprimer n'importe quel élément est O (1) une fois que vous avez un ListIteratorà cette position. Cependant, accéder à un élément arbitraire par index est O (n).
Une autre méthode moche:
String[] a ={"BLAH00001","DIK-11","DIK-2","MAN5"};
String[] k=Arrays.toString(a).split(", ",2)[1].split("]")[0].split(", ");