Básicamente, mi amigo ha estado diciendo que podría acortar mi código usando una forma diferente de verificar si una matriz int contiene un int, aunque no me dirá qué es: P.
Actual:
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
También he probado esto, aunque siempre devuelve falso por alguna razón.
public boolean contains(final int[] array, final int key) {
return Arrays.asList(array).contains(key);
}
¿Podría alguien ayudarme?
Gracias.
Hashset
respuesta del mecanismo de nuevo juicio basado en cheque . Es la forma más rápida.ArrayList
la implementación está haciendo lo mismo.Respuestas:
Aquí está la solución Java 8
fuente
Simplemente podría usar
ArrayUtils.contains
fromApache Commons Lang library
.fuente
ArrayUtils.contains()
es parte de laApache Commons Lang
biblioteca. A pesar de que es una gran biblioteca, probablemente no sea una buena idea agregar dependencia externa solo para verificar si la matriz contiene un elemento: DEs porque
Arrays.asList(array)
regresaList<int[]>
.array
El argumento se trata como un valor que desea ajustar (obtiene una lista de matrices de entradas), no como vararg.Nota que hace el trabajo con los tipos de objetos primitivos (no):
o incluso:
Pero no puede tener
List<int>
y el autoboxing no funciona aquí.fuente
Guayaba ofrece métodos adicionales para tipos primitivos. Entre ellos, un método contiene que toma los mismos argumentos que el suyo.
También puede importar estáticamente la versión de guayaba.
Ver la explicación de los primitivos de guayaba
fuente
De otra manera:
Esto modifica la matriz pasada. Tendría la opción de copiar la matriz y trabajar en la matriz original, es decir,
int[] sorted = array.clone();
pero esto es solo un ejemplo de código corto. El tiempo de ejecución es
O(NlogN)
mientras tu camino esO(N)
fuente
contains
método modificara mi matriz.-1
si tiene la intención de ser verdad. "El punto de inserción se define como el punto en el que se insertaría la clave en la lista: el índice del primer elemento mayor que la clave, o list.size () si todos los elementos de la lista son menores que la clave especificada. ". Necesito decir>= 0
.Sé que es muy tarde, pero inténtalo en
Integer[]
lugar de hacerloint[]
.fuente
Usos únicos
2.use HashSet para considerar el rendimiento si lo usa más de una vez.
fuente
Prueba esto:
fuente
Puede convertir su matriz int primitiva en una lista de matrices de enteros usando el siguiente código de Java 8,
Y luego use el
contains()
método para verificar si la lista contiene un elemento en particular,fuente
esto funcionó en java 8
fuente
Puede usar la
java.util.Arrays
clase para transformar la matrizT[?]
en unList<T>
objeto con métodos comocontains
:fuente
Dependiendo de qué tan grande sea su matriz de int, obtendrá un rendimiento mucho mejor si usa colecciones y en
.contains
lugar de iterar sobre la matriz un elemento a la vez:fuente
Solución # 1
Dado que la pregunta original solo quiere una solución simplificada (y no una más rápida), aquí hay una solución de una línea:
Explicación: Javadoc de
Arrays.toString()
estados que el resultado está entre corchetes y los elementos adyacentes están separados por los caracteres "," (una coma seguida de un espacio). Entonces podemos contar con esto. Primero convertimosarray
a una cadena, y luego verificamos sikey
está contenida en esta cadena. Por supuesto, no podemos aceptar "subnúmeros" (por ejemplo, "1234" contiene "23"), así que tenemos que buscar patrones en los quekey
esté precedido por un corchete de apertura o un espacio, y seguido por un corchete de cierre o una coma.Nota: El patrón de expresiones regulares utilizado también maneja correctamente los números negativos (cuya representación de cadena comienza con un signo menos).
Solución # 2
Esta solución ya está publicada pero contiene errores, así que publico la solución correcta:
Además, esta solución tiene un efecto secundario: modifica el
array
(lo ordena).fuente
Intenta
Integer.parseInt()
hacer esto .....fuente