Je dois créer une liste qui enregistre deux colonnes {int, String}. Je pense que ArrayList est ce dont j'ai besoin mais je ne peux pas comprendre. J'ai extrait les chaînes d'une base de données et int est la valeur d'index dont j'ai besoin pour identifier la position des chaînes pour plus tard.
List<List<String>> strArray = ArrayList<List<String>>;
puis-je faire quelque chose comme strArray.add (). add () pour chaque ligne extraite de la base de données?
Je pense que vous devriez utiliser HashMap
avec int
comme clé et String
comme valeur si vos valeurs int
seront uniques.
Map<Integer,String> myMap = new HashMap<Integer,String>();
myMap.put(1,"ABC");
Notez que Map
étant une collection et que les collections Java ne stockent pas les primitives comme int
, elles stockent des objets. Vous devez donc utiliser la classe wrapper Integer
pour vos valeurs int
.
Refer this link Pourquoi les collections Java ne peuvent-elles pas stocker directement des types Primitives?
Une autre approche serait de créer un objet personnalisé:
Class CustomObject {
int value1;
String value2;
CustomObject(int v1, String v2) {
value1 = v1;
value2 = v2;
}
}
Et puis l'utiliser:
List<CustomObject> myList = new ArrayList<CustomObject>();
CustomObject o1 = new CustomObject(1, "one");
myList.add(o1);
// etc.
Si les valeurs int
sont uniques et que vous souhaitez les considérer comme des clés, une Map
fonctionnerait comme l'ont suggéré d'autres.
Si vous avez besoin de deux valeurs, vous pouvez utiliser native Pair class
List<Pair> mPairs = new ArrayList<Pair>();
Pair pair = new Pair(123,"your string");
mPairs.add(pair);
Ce sera une bonne décision si vos valeurs int ne sont pas uniques et vous ne pouvez donc pas utiliser HashMap.
Si vos identifiants ne sont pas uniques, vous pouvez toujours utiliser Map:
Map<Integer, String> map = new IdentityHashMap<Integer, String>();
map.put(new Integer(1), "string");
IdentityHashMap - utilisez une implémentation native hashCode pour chaque OBJET. Par conséquent, vous n'avez pas besoin d'identifiants uniques, mais vous DEVEZ créer TOUS les entiers via l'opérateur 'new', et ne pas utiliser l'autoboxing, car il existe un mécanisme de cache .
Il existe également un paramètre JVM, qui contrôle la taille du cache '-XX: AutoBoxCacheMax ='. Mais en utilisant ce paramètre, vous ne pouvez pas désactiver le cache. Si vous définissez une taille égale à zéro, le cache l’ignorera et utilisera la valeur par défaut: [-128; 127]. Ce paramètre est seulement pour les entiers, il n'y a pas ce genre de paramètre pour Long.
UPDATEPour les clés non uniques, vous pouvez utiliser une sorte de carte multiple: Carte> carte
Et stockez-y vos valeurs avec des clés non uniques:
map.put(1, new ArrayList<String>());
map.get(1).add("value1");
map.get(1).add("value2");
Vous pouvez utiliser HashMap pour cela par exemple.
Vous pouvez également trouver l'implémentation MultiMap dans google-collections: 'guava'.
Je pense que vous pouvez envelopper le int et la chaîne dans une classe, puis mettre les objets de classe dans List.
La carte est un objet qui associe les clés aux valeurs. Une carte ne peut pas contenir de clés en double. chaque clé peut correspondre à au plus une valeur.
Je pense que ce serait mieux si vous utilisiez Map<Integer,String>
où key(Integer)
serait l'index qui pointera sur String
.
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"str1");
map.put(2,"str2");
...