Pourquoi List.add (E) retourne booléen alors que List.Add (int, E) renvoie void?
À la recherche à la javadoc j'ai vu que une liste de tableaux a une surcharge de méthode add:
public boolean add(E e)
Ajoute l'élément spécifié à la fin de cette liste.
et
public void add(int index,
E)Insère l'élément spécifié à la position spécifiée dans cette liste. Déplace l'élément actuellement à cette position (le cas échéant) et tous les éléments à droite (en ajoute une de leurs indices).
J'ai remarqué que le premier a renvoyé un boolean
tandis que le second était un void
. Comme il s'avère, la première add
doit retourner un boolean
parce que:
Retourne:
vrai (comme spécifié par Collecte.ajouter(E))
Je suis donc allé à Collection.ajouter(E):
boolean add(E e)
Assure que cette collection contient l'élément spécifié (en option). Retourne true si cette collection a changé par suite de l'appel. (Retourne false si cette collection n'a pas permis de doublons et contient déjà l'élément spécifié.)
Donc ma question est, pourquoi est - add
spécifié à return boolean, au lieu d'être vide? Quand je add
quelque chose que je m'attends seulement de faire une opération.
Je comprends qu'il y a d'autres structures de données qui, par opposition à la liste de tableaux, de ne pas autoriser les doublons (comme les jeux). Mais même alors, ne pouvait pas le problème soit résolu le long des lignes de:
public void add(E e){
if(e is not in set){
add e;
}
}
De cette façon, si e
EST dans l'ensemble aucune action n'est prise. Pourquoi est-il mieux de retourner un boolean
au lieu de la void
approche?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Collection.add
est une jolie méthode générique (pas dans le sens de Java génériques -- dans le sens d'être largement applicable). En tant que tel, ils voulaient une valeur de retour qui s'appliquent généralement.Certaines classes (comme
ArrayList
) toujours accepter les éléments, et il en sera toujours de retourtrue
. Vous avez raison, dans ces cas, le type de retour devoid
serait tout aussi bon.Mais d'autres, comme
Set
parfois de ne pas permettre à un élément à ajouter. DansSet
ce qui se passe si une égalité élément était déjà présent. Il est souvent utile de savoir que. Un autre exemple est bornée collection (qui ne peut contenir qu'un certain nombre d'éléments).Vous pourriez demander, "vous ne pouvez pas le code il suffit de cocher manuellement?" Par exemple, avec un ensemble:
C'est plus détaillé que ce que vous pouvez faire maintenant, mais pas beaucoup:
Mais cette check-puis-loi de comportement n'est pas thread-safe, qui peut être crucial dans les applications multithread. Par exemple, il se pourrait qu'un autre thread ajouté une égalité de point entre vous de vérifier
set.contains(item)
et laset.add(item)
dans le premier extrait de code. Dans un scénario multithread, ces deux actions ont vraiment besoin d'être un unique, atomique; retourboolean
de la méthode rend possible.parce qu'il est souvent utile de savoir si quelque chose a été ajouté, ou alternativement était déjà là.
Parce que c'est une information supplémentaire qui ne coûte rien et peut être utile dans certaines situations. Par exemple:
Sinon vous auriez à faire
qui nécessite deux fois plus de travail (d'abord, vous avez à la recherche, puis à nouveau une recherche à ajouter).