2009-12-20 4 views
0

Comment puis-je vérifier si la valeur existe dans ArrayList par son index?Java: ArrayList: Détermine si l'entrée existe par son index

Java offre contient la méthode (Object), mais contient pas (index entier) Méthode

Merci

+0

Comment est-ce lié à Sharepoint? –

+0

Je ne sais pas comment ce tag est arrivé, supprimé maintenant, merci de le signaler – Andrey

Répondre

5

Pas du tout sûr de votre question. Vous parlez de voir si une entrée "existe" mais vous parlez de Java sans méthode remove(Object index). En ce qui concerne remove: Il existe la méthode remove(int) sur l'interface List implémentée par ArrayList. (Java List s sont indexées par int, non par Object.)

Quant à savoir si une entrée « existe » à un indice donné, si la méthode size() de la liste est supérieur à l'indice (et l'indice est non-négatif), puis il y a une entrée à l'index:

if (index >= 0 && index < list.size()) { 
    // An entry exists; hey, let's remove it 
    list.remove(index); 
} 
+0

Merci. le poste était en désordre parce que j'ai accidentellement confondu "supprimer" et "contient" – Andrey

+0

FFR, le document de Java spécifie quand vous recevriez et IndexOutOfBoundsException, inversant ainsi cette logique vous donnerait des index valides. – Drew

+0

Solution simple et étonnante, travaillé comme un chaud! Merci et upvoted –

1

Comment puis-je vérifier si la valeur existe dans ArrayList par son indice?

Essayez ceci:

int  aIndex = ...; 
boolean aIsExistByIndex = (aIndex >= 0) && (aIndex < AL.size())

Hope this aide :-p

+0

Je ne vois pas pourquoi cette réponse a été votée * down *; l'expression proposée est correcte. Il manque juste une explication amplificatrice. – seh

+0

Merci, j'ai utilisé votre code. Je ne sais pas qui a voté, mais je pense qu'il a été rejeté parce qu'au début, il manquait une partie du code (probablement posté accidentellement oublié de le finir) – Andrey

+0

Il était probablement en partie ma faute comme j'avais initialement oublié l'évasion > 'et' <':-p. – NawaMan

3

Si vous avez un tableau clairsemé (qui peut contenir des valeurs nulles) vous pouvez vérifier cela aussi bien.

public static boolean isSet(List<?> list, int index) { 
    return index >=0 && index < list.size() && list.get(index) != null; 
} 

Je ne sais pas pourquoi vous voulez que l'index soit le type entier, mais si vous le faites, vous devriez vérifier null aussi bien. Autoriser une valeur nulle est la seule bonne raison d'avoir un type entier.

public static boolean isSet(List<?> list, Integer index) { 
    return index != null && index >=0 && index < list.size() && list.get(index) != null; 
} 
0

Vous devriez peut-être envisager d'utiliser un HashMap au lieu d'un ArrayList. Il y a une raison pour laquelle la méthode exist (int index) ne sont pas mis en œuvre pour ArrayList (principalement parce qu'il faut pour beaucoup de mémoire pour mettre en œuvre un ArrayList pour les index des spécificités):

int i = 3; int j = 4; 
HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>(); 
hm.put(3, 4); 
hm.containsKey(3);