Basicamente, meu amigo tem dito que eu poderia tornar meu código mais curto usando uma maneira diferente de verificar se um array int contém um int, embora ele não me diga o que é: P.
Atual:
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
Também tentei fazer isso, embora sempre retorne falso por algum motivo.
public boolean contains(final int[] array, final int key) {
return Arrays.asList(array).contains(key);
}
Alguém poderia me ajudar?
Obrigado.
Hashset
resposta do mecanismo de nova tentativa com base. É o caminho mais rápido.ArrayList
implementação está fazendo o mesmo.Respostas:
Aqui está a solução Java 8
fonte
Você pode simplesmente usar
ArrayUtils.contains
deApache Commons Lang library
.fonte
ArrayUtils.contains()
faz parte daApache Commons Lang
biblioteca. Mesmo que seja uma ótima lib, provavelmente ainda não é uma boa ideia adicionar dependência externa apenas para verificar se o array contém um elemento: DÉ porque
Arrays.asList(array)
volteList<int[]>
.array
argumento é tratado como um valor que você deseja agrupar (você obtém uma lista de arrays de ints), não como vararg.Note-se que ele faz o trabalho com tipos de objeto (não primitivos):
ou mesmo:
Mas você não pode ter
List<int>
e autoboxing não está funcionando aqui.fonte
O Guava oferece métodos adicionais para tipos primitivos. Entre eles, um método contém que leva os mesmos argumentos que o seu.
Você também pode importar estaticamente a versão goiaba.
Veja os primitivos de goiaba explicados
fonte
Uma maneira diferente:
Isso modifica a matriz passada. Você teria a opção de copiar o array e trabalhar no array original, ou seja,
int[] sorted = array.clone();
mas este é apenas um exemplo de código curto. O tempo de execução é
O(NlogN)
enquanto o seu caminho éO(N)
fonte
contains
método modificasse meu array.-1
se for a intenção de ser verdade. "O ponto de inserção é definido como o ponto em que a chave seria inserida na lista: o índice do primeiro elemento maior do que a chave ou list.size () se todos os elementos da lista forem menores do que a chave especificada. " Precisa dizer>= 0
.Eu sei que é muito tarde, mas tente em
Integer[]
vez deint[]
.fonte
1. usos únicos
2. use HashSet para consideração de desempenho se você usar mais de uma vez.
fonte
Experimente isto:
fonte
Você pode converter sua matriz primitiva int em uma lista de números inteiros usando o código Java 8 abaixo,
E então use o
contains()
método para verificar se a lista contém um elemento específico,fonte
isso funcionou em java 8
fonte
Você pode usar a
java.util.Arrays
classe para transformar a matrizT[?]
em umList<T>
objeto com métodos comocontains
:fonte
Dependendo de quão grande será a sua matriz de int, você obterá um desempenho muito melhor se usar coleções e em
.contains
vez de iterar na matriz um elemento por vez:fonte
Solução # 1
Uma vez que a pergunta original deseja apenas uma solução simplificada (e não mais rápida), aqui está uma solução de uma linha:
Explicação: Javadoc de
Arrays.toString()
estados, o resultado é colocado entre colchetes e os elementos adjacentes são separados pelos caracteres "," (uma vírgula seguida por um espaço). Portanto, podemos contar com isso. Primeiro, convertemosarray
para uma string e, em seguida, verificamos sekey
essa string está contida. Claro que não podemos aceitar "subnúmeros" (por exemplo, "1234" contém "23"), então temos que procurar padrões onde okey
seja precedido por um colchete de abertura ou um espaço e seguido por um colchete de fechamento ou vírgula.Nota: O padrão regexp usado também lida corretamente com números negativos (cuja representação de string começa com um sinal de menos).
Solução # 2
Esta solução já foi postada mas contém erros, então posto a solução correta:
Além disso, esta solução tem um efeito colateral: ela modifica o
array
(ordena).fonte
Tente
Integer.parseInt()
fazer isso ...fonte