Achando um determinado número maior ou menor de todos e exibindo sua posição | ArrayList

Olá outra vez, galera, estou tentando aprender a mexer com ArrayList, consegui progredir com boa parte do código, no entanto, eu preciso de ideias de como implementar a parte que falta em sobre encontrar um número e mostrar a posição dele.

//Inicializações de novos objetos
	Scanner ler = new Scanner(System.in);
	ArrayList vetor = new ArrayList();
	StringBuffer sbk = new StringBuffer();
	
	int numero;
	
	//Entrada de dados
	System.out.println("Insira um número para iniciar: ");
	int qtdVetor = ler.nextInt();
	
	//Repetição que adiciona números à lista
	for(int x = 0; x<qtdVetor; x++) {
		System.out.println("Digite um número para inserir à lista: ");
		numero = ler.nextInt();
		vetor.add(numero);
	}
	
	
	
	//Saída de dados da lista
        System.out.println(vetor.get(1));
        System.out.println("Lista é composta por:"+vetor);
}

}

Eu encontrei um código que fica comparando com variáveis “maior” e “menor” pra exibir depois, alguém que tenha esse tipo de código poderia me explicar como ele funciona?

Supondo que tenha apenas duas variáveis:

maior;
if a > b {
  maior = a;
} else {
  maior = b;
}

Se fossem 3 variáveis:

if a > b {
  maior = a;
} else {
  maior = b;
}

if c > maior {
  maior = c;
}

Se fossem 4 variáveis:

if a > b {
  maior = a;
} else {
  maior = b;
}

if c > maior {
  maior = c;
}

if d > maior {
  maior = d;
}

Observe que repetiu o ‘c’ e o ‘d’, então podemos fazer o seguinte para repetir com todos:

maior = a; // o maior é a variável 'a'

if a > maior {
  maior = a;
}

if b > maior {
  maior = b;
}

if c > maior {
  maior = c;
}

if d > maior {
  maior = d;
}

Se fosse um vetor:

maior = vetor[0]; // o maior é o primeiro
loop {
  if vetor[x] > maior {
    maior = vetor[x];
  }
}

Para descobrir a posição do maior, o ArrayList tem o método indexOf:

posicaoDoMaior = vetor.indexOf(maior);

Outra ideia:

// Java 8
int maior = vetor.stream().mapToInt(x -> (int) x).max().get();
int posicaoDoMaior = vetor.indexOf(maior);

Outra ideia:

Object[] clone = vetor.toArray(); // cria uma cópia
Arrays.sort(clone); // ordena a cópia
int maior = clone[clone.length - 1]; // obtem o maior
int posicaoDoMaior = vetor.indexOf(maior);
1 curtida

Eu fiz isso aqui, mas o vetorNovo.get(v) tá indicando erro, como que eu faço pra apontar dentro de um If??

ArrayList vetorNovo = new ArrayList();

	System.out.println("Digite um número para iniciar: ");
	
	for (v = 0; v < vetorNovo.size()-1; v++) { //Ler o vetor
		System.out.print("Digite um numero: ");
		vetorNovo.add(v);
			
		if (vetorNovo.get(v) < maior) { //Grava o maior valor de vetor[v] em maior
			maior = vetorNovo.get(v);
		}
		if (vetorNovo.get(v) > menor) { //Grava o menor valor de vetor[v] em menor
			menor = vetorNovo.get(v);
		}
	}
	
	int posicaoDoMenor = vetorNovo.indexOf(menor);
	System.out.print("\nO menor número é: " + menor);
	System.out.println("\nSua posição é: " + posicaoDoMenor);
}

O get retorna um Object e não um int, então use o cast:

if (((int)vetorNovo.get(v)) < maior) {

Ou modifique o tipo genérico da lista:

ArrayList<Integer> vetorNovo = new ArrayList<Integer>();