public static void main(String[] args) { // Crear una función a la que le pasamos un hashmap // De cadenas y números y nos elimine los elementos // que tengan un valor impar HashMap<String, Integer> numeros = new HashMap<String, Integer>(); numeros.put("a", 1); numeros.put("b", 2); numeros.put("c", 3); numeros.put("d", 4); HashMap<String, Integer> res = fueraPares(numeros); System.out.println(numeros); System.out.println(res); System.out.println(fueraParesSin(numeros)); } public static HashMap<String, Integer> fueraPares(HashMap<String, Integer> lista) { HashMap<String, Integer> temp = (HashMap<String, Integer>) lista.clone(); for (Entry<String, Integer> par : lista.entrySet()) { if (par.getValue() % 2 == 0) { temp.remove(par.getKey()); } } return temp; } public static HashMap<String, Integer> fueraParesSin(HashMap<String, Integer> lista) { HashMap<String, Integer> temp = new HashMap<String, Integer>(); for (Entry<String, Integer> par : lista.entrySet()) { if (par.getValue() % 2 != 0) { temp.put(par.getKey(),par.getValue()); } } return temp; }
Ejemplos Collections
ArrayList<String> alumnos= new ArrayList<String>(); alumnos.add("Ana"); alumnos.add("Eva"); alumnos.add("Pep"); // Añadir elementos a mi colección de una manera rápida Collections.addAll(alumnos, "Rosa","Juan","María"); System.out.println(alumnos); // Sustituye todos los elementos existentes con el que pones //Collections.fill(alumnos, "Ana"); // Puedo ordenar desde la colección Collections.sort(alumnos); // Si le doy la vuelta, tengo de mayor a menor Collections.reverse(alumnos); System.out.println(alumnos); // Desordenar una colección Collections.shuffle(alumnos); System.out.println(alumnos); Collections.reverse(alumnos); System.out.println(alumnos); // Intercambiar elementos Collections.swap(alumnos, 0, 2); System.out.println(alumnos); alumnos.add("Ana"); // Veces que aparece un elemento en la colección System.out.println(Collections.frequency(alumnos, "Ana")); // Máximo y mínimo System.out.println(Collections.max(alumnos)); System.out.println(Collections.min(alumnos));
Ejemplos hashSet
HashSet<String> palabras = new HashSet<String>(); palabras.add("perro"); palabras.add("gato"); palabras.add("ratón"); System.out.println(palabras); palabras.add("ratón"); System.out.println(palabras); LinkedList<Integer> lista = new LinkedList<Integer>(Arrays.asList(1, 2, 4, 14, 3, 4, 5, 6, 7, 3, 1, 1, 7)); HashSet<Integer> res = new HashSet<Integer>(); res.addAll(lista); System.out.println(res); res.retainAll(new ArrayList<Integer>(Arrays.asList(1,2,3,40))); System.out.println(res);
Ejemplos HashMap
public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<>(); // Añadir elementos al HashMap map.put("one", 1); map.put("two", 2); map.put("three", 3); System.out.println(map); map.put("three", 30); System.out.println(map); System.out.println(map.get("three")); HashMap<Integer, String> mapa = new HashMap<>(); mapa.put(1, "one"); mapa.put(2, "two"); mapa.put(3, "three"); System.out.println(mapa); mapa.put(30, "three"); System.out.println(mapa); mapa.put(30, "treinta"); System.out.println(mapa); mapa.remove(3); // Elimino por la clave System.out.println(mapa); mapa.remove(30, "three"); System.out.println(mapa); // Recorrer los valores del hashmap for (String valor : mapa.values()) { System.out.println(valor); } // Recorrer las claves for (Integer valor : mapa.keySet()) { System.out.println(valor); } // Recorrerlo todo: a partir de la clave obtenemos el valor for (Integer valor : mapa.keySet()) { System.out.println(valor + "-" + mapa.get(valor)); } // Recorrerlo con el tipo 'Entry' for (Entry<Integer, String> par : mapa.entrySet()) { System.out.println(par.getKey()+"-"+par.getValue()); } // Métodos para saber si hay una clave o hay un valor System.out.println(mapa.containsKey(2)); System.out.println(mapa.containsValue("two")); } HashMap<String, Integer> clase = new HashMap<>(); ArrayList<String> alumnos = new ArrayList<String>(); alumnos.add("Ana"); alumnos.add("Eva"); ArrayList<Integer> notas = new ArrayList<Integer>(); notas.add(6); notas.add(7); notas.add(17); for(int i=0;i<alumnos.size();i++) { clase.put(alumnos.get(i), notas.get(i)); } System.out.println(clase);
Ejercicios ArrayList resueltos
public static void main(String[] args) { LinkedList<Integer> lista=new LinkedList<Integer>(Arrays.asList(1,2,4,14,3,4,5,6,7,3,1,1,7)); System.out.println(eliminarDuplicadosSin(lista)); } public static int contarNumero(LinkedList<Integer> numeros, int numero) { int total = 0; for (int n : numeros) { if (n == numero) { total++; } } return total; } public static LinkedList<Integer> listaFibonacci(int limite) { if (limite <= 0) { return null; } LinkedList<Integer> fibo = new LinkedList<Integer>(); fibo.add(1); if (limite == 1) { return fibo; } fibo.add(1); for (int i = 2; i < limite; i++) { fibo.add(fibo.get(i - 1) + fibo.get(i - 2)); } return fibo; } public static LinkedList<String> listaRellena(int cantidad, String cadena) { LinkedList<String> res = new LinkedList<String>(); for (int i = 0; i < cantidad; i++) { res.add(cadena); } return res; } public static LinkedList<Integer> eliminarDuplicados(LinkedList<Integer> lista){ LinkedList<Integer> resultado=(LinkedList<Integer>) lista.clone(); resultado.sort(null); for(int i=resultado.size()-1;i>0;i--) { if (resultado.get(i)==resultado.get(i-1)) { resultado.remove(i); } } return resultado; } public static LinkedList<Integer> eliminarDuplicadosSin(LinkedList<Integer> lista){ LinkedList<Integer> resultado=new LinkedList<Integer>(); for(int numero:lista) { if(!resultado.contains(numero)) { resultado.add(numero); } } return resultado; }
Ejemplos ArrayList
public static void main(String[] args) { ArrayList<Integer> numeros=rellenarRandom(10,10); System.out.println(numeros); System.out.println(sumaLista(numeros)); System.out.println(filtrarListaPares(numeros)); } // Un método al que le paso una cantidad y nos devuelve // un arraylist de ese tamaño con numeros aleatorios public static ArrayList<Integer> rellenarRandom(int tam, int rango){ ArrayList<Integer> resultado=new ArrayList<Integer>(); for(int i=0;i<tam;i++) { resultado.add((int) (Math.random()*rango+1)); } return resultado; } public static int sumaLista(ArrayList<Integer> numeros) { int res=0; for(int n:numeros) { res+=n; } return res; } public static ArrayList<Integer> filtrarListaPares(ArrayList<Integer> numeros){ ArrayList<Integer> resultado=new ArrayList<Integer>(); for(int n:numeros) { if (n%2==0) { resultado.add(n); } } return resultado; }
Ejemplos LinkedList
public static void main(String[] args) { // La declaración de un LinkedList es igual que un arraylist LinkedList<Integer> numbers = new LinkedList<>(); numbers.add(5); numbers.add(0, 8); // Más eficiente en un linkedlist for (int n : numbers) { System.out.println(n); } numbers.add(3); numbers.add(27); // Añade al principio numbers.addFirst(1); // Devuelve el primero System.out.println(numbers.getFirst()); System.out.println(numbers.reversed()); numbers.sort(null); System.out.println(numbers); // Obtiene el primer elemento y lo elimina int primero = numbers.poll(); System.out.println(primero); System.out.println(numbers); // Obtiene el último elemento y lo elimina int ultimo = numbers.pollLast(); System.out.println(ultimo); System.out.println(numbers); ; }
Ejemplos ArrayList
public static void main(String[] args) { // Definir un ArrayList // Pongo ArrayList porque es el tipo general (arraylist) // Pongo <..> para especificar el tipo del // contenido del ArrayList (<String> <LocalDate>...) // Muy importante, si quiero de valores primitivos // no pongo el valor primitivo sino la clase que lo envuelve // int->Integer double->Double... // Lo tengo que crear con la palabra clave 'new' ArrayList<String> lista = new ArrayList<String>(); ArrayList<String> lista2 = new ArrayList<String>(); ArrayList<Integer> numeros=new ArrayList<Integer>(); // Una vez hemos construído el ArrayList ya podemos // trabajar con él lista.add("Ana"); lista.add("eva"); lista.add("pep"); System.out.println(lista.size()); lista2.add("Ana"); lista2.add("eva"); lista2.add("pep"); System.out.println(lista.size()); // Recorrer el arraylist for(int i=0;i<lista.size();i++) { System.out.println(lista.get(i)); } for(String nombre:lista) { System.out.println(nombre); } // Añadiendo elementos sueltos a través de la utilidad // de Arrays 'asList' que convierte elementos // en una lista lista.addAll(Arrays.asList("Juan","rosa")); // Añado una lista ya existente lista.addAll(lista2); // Elimina el elemento que esté en la posición 1 lista.remove(1); // Elimina el elemento lista.remove("Ana"); System.out.println(lista); lista.remove("ruth"); // eliminar todos los elementos de una colección lista.removeAll(Arrays.asList("Ana")); // Arrays.asList nos convierte una serie de elementoss // En una lista y lo puedo utilizar para inicializar ArrayList<String> alumnos = new ArrayList<String>(Arrays.asList("Ana","Eva")); System.out.println(alumnos); // Añadir en una posición determinada alumnos.add(1,"Rigoberta"); System.out.println(alumnos); // Modifico el elemento que está en la posición 0 alumnos.set(0, "Ana Pi"); System.out.println(alumnos); // Elimina el primero alumnos.removeFirst(); System.out.println(alumnos); // Métodos para buscar elementos System.out.println(alumnos.contains("Eva")); System.out.println(alumnos.contains("Evar")); // El indexOf funciona parecido al String System.out.println(alumnos.indexOf("Eva")); System.out.println(alumnos.indexOf("Evar")); int pos=lista.indexOf("pep"); int lastPos=lista.lastIndexOf("pep"); System.out.println(pos+"-"+lastPos); lista.add("Zacarías"); // Ordenamos alfabeticamente pero ojo mayúsculas primero lista.sort(null); System.out.println(lista); }
Rotar Derecha, Paridad array y Duplicados
public static void main(String[] args) { int[] numeros= {1,2,3,4,5}; System.out.println(Arrays.toString(rotarDerecha(numeros,2))); System.out.println(Arrays.toString(numeros)); } /* * Crear una función rotarDerecha a la que la pasamos un * array de enteros y nos devuelve el array con los elementos * desplazados a la derecha (el último va al principio) rotarDerecha([1,2,3,4]) -> [4,1,2,3] */ public static int[] rotarDerecha(int[] array, int pos) { int longitud=array.length; int[] nuevo=new int[longitud]; // En el primero pongo el último // En los siguientes del nuevo pongo el que está en // la posición anterior del que me pasan //nuevo[0]=array[array.length-1]; for(int i=0;i<longitud;i++) { nuevo[i]=array[(i-pos+longitud) % longitud]; } return nuevo; } public static int paridadArray(int[] numeros) { // Dos contadores: pares e impares int pares = 0; int impares = 0; for (int numero : numeros) { if (numero % 2 == 0) { pares++; } else { impares++; } } switch (Integer.compare(pares, impares)) { case -1: return 1; case 1: return 2; default: return 0; } } public static boolean hayDuplicados(int[] numeros) { int[] ordenado=numeros.clone(); Arrays.sort(ordenado); // { 1, 2, 3, 4, 6,5,1 }->{1,1,2,3,4,5,6} for(int i=0;i<ordenado.length-1;i++) { if (ordenado[i]==ordenado[i+1]) { return true; } } return false; } // Sin ordenar la receta es lo que haría yo public static boolean hayDuplicadosSin(int[] numeros) { for(int i=0;i<numeros.length;i++) { int numero=numeros[i]; for(int j=i+1;j<numeros.length;j++) { if(numeros[j]==numero) { return true; } } } return false; }
Dos maneras de encontrar el menor y probar cual tarda más
public static void main(String[] args) { // Vamos a crear un array con 10000 números aleatorios // Y vamos a comprobar cronómetro en mano cuanta diferencia hay // Entre usar un método y otro int[] numeros=new int[10000]; for (int i=0;i<numeros.length;i++) { numeros[i]=(int) (Math.random()*100+1); } //System.out.println(Arrays.toString(numeros)); LocalTime ahora=LocalTime.now(); System.out.println(menorElemento(numeros)); LocalTime despues=LocalTime.now(); Duration tiempo=Duration.between(ahora, despues); System.out.println(tiempo); ahora=LocalTime.now(); System.out.println(menorElementoOrden(numeros)); despues=LocalTime.now(); tiempo=Duration.between(ahora, despues); System.out.println(tiempo); } // Devolver el menor elemento de un array public static int menorElemento(int[] numeros) { // Almacenar el elemento menor int menor=numeros[0]; // Recorrer el array for(int numero:numeros) { // Comparo cada valor con el que ya tengo if(numero<menor) { menor=numero; } } return menor; } // Los arrays se pueden modificar en las funciones // pero no SE DEBEN MODIFICAR por defecto public static int menorElementoOrden(int[] numeros) { int[] copia=numeros.clone(); Arrays.sort(copia); return copia[0]; }