ventajas valor tipos ejemplos ejemplo diferentes datos clave caracteristicas bases java hashmap hashtable shuffle linkedhashmap

java - tipos - valor bases de datos



La mejor estructura para la lista de clave-valor(entero, cadena) que se barajará (3)

Cree una clase Pair , que contiene tanto el Integer como la String y luego agregue múltiples Objetos de Pair a una Lista, que se mezclará.

public class Pair { private Integer integer; private String string; //accessors }

Entonces:

List<Pair> list = new ArrayList<Pair>(); //...add some Pair objects to the list Collections.shuffle(list);

Necesito implementar una estructura en Java que sea una lista de valores-clave (de tipos Entero-Cadena) y quiero barajarla.

Básicamente, me gustaría hacer algo así.

public LinkedHashMap<Integer, String> getQuestionOptionsMap(){ LinkedHashMap<Integer, String> shuffle = new LinkedHashMap<Integer, String> (); if (answer1 != null) shuffle.put(new Integer(1), answer1); if (answer2 != null) shuffle.put(new Integer(2), answer2); if (answer3 != null) shuffle.put(new Integer(3), answer3); if (answer4 != null) shuffle.put(new Integer(4), answer4); Collections.shuffle(shuffle); return shuffle; }

Sin embargo, HashMap no se puede barajar.

Pude obtener aleatoriamente una clave del hashmap y luego devolver el elemento vinculado, pero estoy seguro de que esta no es la mejor solución para mi problema.

¿Hay alguna forma mejor?

Gracias por adelantado.


Puede mantener una List separada de los valores clave, mezclarlos y usarlos para acceder al HashMap .

List<Integer> keys = new ArrayList<Integer>(map.keySet()); Collections.shuffle(keys); for(Integer i : keys) map.get(i); // Gets the values in the shuffled order


Puedes guardar el mapa. El mapa está diseñado para buscarse por clave, así que sugiero que tengas una lista de claves barajadas.

public Map<Integer, String> getQuestionOptionsMap() { Map<Integer, String> map = new HashMap<>(); String[] answers = {null, answer1, answer2, answer3, answer4}; for (int i = 1; i < answers.length; i++) if (answers[i] != null) map.put(i, answers[i]); List<Integer> order = new ArrayList<>(map.keySet()); Collections.shuffle(order); Map<Integer, String> shuffled = new LinkedHashMap<>(); for (Integer key : order) shuffled.put(key, map.get(key)); return shuffled; }