1. Coleções em Java
A hierarquia da estrutura Collection. O pacote java.util contém todas as classes e interfaces do framework Collection. Elementos principais da estrutura de coleções Java - interfaces, implementações, operações de agregação e algoritmos.
A classe de coleção do Java é definida no java.util
pacote, suporta genéricos e fornece principalmente três tipos de classes de coleção, incluindo List
, Set
e Map
. As coleções Java usam travessia uniforme Iterator
e tentam não usar interfaces legadas.
1, Lista
Lista é o tipo mais básico de coleção: é uma lista ordenada. Em aplicações práticas, precisamos adicionar e excluir uma lista ordenada de elementos, e nós a usamos mais ArrayList
.
2、Mapa
Map, uma estrutura de dados de uma tabela de mapeamento de chave-valor, é usada para encontrar valores (elementos) de forma eficiente por meio de chaves.
3、Conjunto
Se precisarmos apenas armazenar chaves exclusivas e não precisar armazenar valores mapeados, podemos usar Set.
4、Fila
queue( Queue
) é uma coleção frequentemente usada. Queue
Na verdade, ele implementa uma lista ordenada de primeiro a entrar, primeiro a sair (FIFO: First In First Out).
5, Iterador
Esse padrão de percorrer uma coleção por meio de um objeto Iterator é chamado de iterador. A vantagem de usar iteradores é que o chamador sempre percorre os vários tipos de coleção de maneira uniforme, sem precisar se relacionar com suas estruturas internas de armazenamento.
Se escrevermos uma classe de coleção e quisermos usar o for cada loop, precisamos apenas atender às seguintes condições:
(1) A classe de coleção implementa a interface Iterable, que requer que um objeto Iterator seja retornado;
(2) Itera os dados internos da coleção com o objeto Iterator.
6, Propriedades
É muito simples ler o Properties
arquivo de configuração com. O arquivo de configuração Java padrão é .properties
a extensão, cada linha é key=value
representada por , e o #
início da classe é um comentário. O seguinte é um arquivo de configuração típico:
# setting.properties
last_open_file=/data/hello.txt
auto_save_interval=60
Inside Properties é essencialmente uma Hashtable.
Pode ser lido de um arquivo ou de um pacote ar.
7、Coleções
Collections
É uma classe de ferramentas fornecida pelo JDK, que também está localizada no java.util
pacote. Ele fornece uma série de métodos estáticos que facilitam a manipulação de várias coleções.
criar coleção vazia;
Crie uma coleção de elemento único;
criar coleções imutáveis;
Ordenar/Embaralhar etc.
Transforme uma coleção sem thread em uma coleção thread-safe
8. Exemplos
1. P: Você conhece essas classes e interfaces legadas?
Resposta: Classes legadas: Hashtable, Vector, Stack; não devem continuar a ser usadas.
Interface herdada: Enumeration<E>: Substituída por Iterator<E>.
2. P: Qual é a diferença entre Set e Map?
Resposta: Set contém apenas valores, enquanto Map contém chaves e valores.
Os conjuntos contêm valores exclusivos, enquanto os mapas podem conter chaves exclusivas com valores duplicados.
Um Set contém um único valor nulo, enquanto um Map pode conter uma única chave nula e n valores nulos.
3. Pergunta: List, Set, Map herdam da interface Collection?
Resposta: Lista, Conjunto é, Mapa não é
4. P: Qual é a principal diferença entre um array e uma coleção?
Resposta: (1) Os arrays são sempre de tamanho fixo, ou seja, os usuários não podem aumentar ou diminuir o comprimento do array de acordo com suas próprias necessidades ou em tempo de execução, mas em Collections, o tamanho pode ser alterado dinamicamente conforme a necessidade.
(2) Arrays só podem armazenar objetos do mesmo tipo ou de tipos semelhantes, mas objetos heterogêneos podem ser armazenados em Collections.
(3) Array não fornece métodos prontos, como classificação e pesquisa, mas o Collection inclui métodos prontos.
5. P: Qual é a diferença entre Iterator e ListIterator?
Resposta: Iterator percorre elementos apenas para frente, enquanto ListIterator percorre elementos para frente e para trás.
6. P: Qual é a diferença entre ConcurrentHashMap, HashMap e HashTable?
Resposta: (1) Os pacotes são diferentes java.util.HashMap; java.util.concurrent.ConcurrentHashMap;
(2) ConcurrentHashMap implementa a interface ConcurrentMap e Serializable. Esta classe é um HashMap thread-safe.
(3) Hashtable herda da classe Dictionary, a matriz subjacente + implementação de lista vinculada, nem chave nem valor podem ser nulos, thread-safe, a maneira de obter thread-safe é bloquear todo o HashTable ao modificar dados, o que é ineficiente, e ConcurrentHashMap fez otimizações relacionadas.
7. P: Os elementos do Conjunto não podem ser repetidos, como garantir que eles não sejam repetidos?
Resposta: Os elementos do Set não podem ser repetidos. Ao colocar, o hash e o valor serão comparados. Caso o hash não exista, é permitido armazená-lo. Se o valor do código hash for o mesmo e o julgamento equals for igual, significa que o elemento já existe, mas não existe; se o valor do código hash for o mesmo e o julgamento equals não for igual, significa que o elemento não existe e existe;
8. P: Qual é a diferença entre ArrayList e LinkedList?
Resposta: (1) ArrayList usa array dinâmico; LinkedList usa lista duplamente encadeada.
(2) ArrayList é mais adequado para armazenamento e mais rápido para ler; LinkedList é mais rápido para operar.
(3) ArrayList fornece acesso aleatório; LinkedList não fornece acesso aleatório.
9. P: Qual é a diferença entre HashMap e TreeMap?
Resposta: HashMap permanece desordenado enquanto TreeMap permanece ascendente.
HashMap é implementado por tabela de hash e TreeMap é implementado por estrutura de árvore.
HashMap pode ser classificado por chave ou valor, e TreeMap pode ser classificado por chave.
HashMap pode conter chaves nulas com vários valores nulos, enquanto TreeMap não pode conter chaves nulas, mas pode ter vários valores nulos.
10. P: Como sincronizar ArrayList?
答:(1)Collections.synchronizedList
(2) Usando CopyOnWriteArrayList, CopyOnWriteArrayList é uma versão thread-safe de ArrayList.
import java.util.*;
public class SyncronizeArrayList {
public static void main(String args[]) {
// Non Synchronized ArrayList
List<String> fruitList = new ArrayList<String>();
fruitList.add("Mango");
fruitList.add("Banana");
fruitList.add("Apple");
fruitList.add("Strawberry");
fruitList.add("Pineapple");
// 同步 ArrayList
furitList = Collections.synchronizedList(fruitList);
// 使用同步块来避免非确定性行为
synchronized (fruitList) {
Iterator<String> itr = fruitList.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}
}
11. P: Como tornar o Java ArrayList somente leitura?
Resposta : Obtenha java ArrayList somente leitura chamando o método Collections.unmodifiableCollection(). Quando definimos um ArrayList como somente leitura, não podemos fazer nenhuma modificação na coleção através dos métodos add(), remove() ou set().
12. Pergunta: Qual das seguintes afirmações está incorreta?
(A) java.util.List pode ser usado para armazenar um conjunto de elementos ordenados armazenados pela posição do índice.
(B) Objetos Java e tipos básicos de dados podem ser armazenados na coleção java.util.Set.
(C) Quando uma thread executa o método sleep() da classe Thread para começar a dormir, o bloqueio do objeto ocupado não será liberado.
(D) Quando a máquina virtual Java inicializa uma classe, se sua classe pai não tiver sido inicializada, sua classe pai será inicializada primeiro.
Resposta: B. Somente objetos Java podem ser armazenados na coleção java.util.Set, e dados de tipos básicos Java não são permitidos.