O que são vetores e por que você provavelmente está confuso
Vetores são coleções ordenadas de elementos do mesmo tipo, acessíveis por um índice numérico inteiro. Em Java, por exemplo, a classe Vector<T> faz parte da API legacy do Java 1.0 e implementa uma lista dinâmicamente redimensionável com operações sincronizadas. A confusão comum é tratar Vector como sinônimo de ArrayList — eles não são a mesma coisa. O ArrayList é mais rápido porque não tem sobrecarga de sincronização. O Vector herdou isso do tempo em que programação concurrente significava "travar tudo". Hoje em dia, se você precisa de sincronização, usa ConcurrentHashMap ou Collections.synchronizedList() de forma seletiva, não Vector cegamente.
A indexação começa em zero. Isso parece óbvio até você tentar acessar o último elemento usando o tamanho da coleção como índice e receber um IndexOutOfBoundsException. Eu já vi isso acontecer todo dia útil no suporte.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Resumo sobre vetores na prática
Aqui vai o essencial sem enrolação. Um vetor é uma estrutura de dados linear que armazena elementos homogêneos em posições contíguas ou referenciadas. As operações básicas são: inserção, remoção, busca e iteração. O problema real que as pessoas subestimam é a complexidade de inserção e remoção no meio do vetor. Remover um elemento no índice 500 de um vetor com 10.000 itens desloca todos os elementos seguintes. É uma operação O(n). Se você está fazendo isso em um loop, seu código vai parecer lento sem motivo aparente.
A solução prática que eu uso: quando preciso remover muitos elementos de uma coleção durante iteração, não uso remove() direto. Crio uma nova coleção com os elementos que quero manter, ou itero de trás para frente usando o índice. A diferença de performance é brutal em datasets grandes. Outro ponto que ninguém ensina: Vector não tem capacity increment definido da mesma forma que ArrayList. O ArrayList cresce 50% da capacidade atual por padrão. O Vector, dependendo do construtor, pode dobrar ou crescer segundo um capacityIncrement que você passa. Se você conhece o tamanho aproximado dos dados, inicialize com esse valor. Evita realocações desnecessárias de memória.
Busca binária só funciona em vetores ordenados. Não adianta aplicar Collections.binarySearch() em um Vector desordenado e esperar que funcione. Eu já perdi duas horas debuggando isso em um sistema legado porque alguém assumiu que o vetor estava ordenado sem verificar. Para uso geral moderno, ArrayList é a escolha padrão. Vector sobrevive em códigos antigos e em cenários muito específicos onde a sincronização intrínseca é necessária e o overhead é aceitável. Se você está começando agora, aprenda ArrayList primeiro. Vector é conhecimento histórico que ainda aparece em provas e em codebases legítimas de sistemas antigos.