Uso de contêineres comuns Java
Os contêineres comumente usados são
provavelmente
-Subclasses da lista
ArraryList 和 LinkedList
-Subclasses de Mapa
HashMap, TreeMap, LinkedHashMap mais um ConcurrentHashMap (segurança simultânea)
-Subclasses de conjunto
HashSet , TreeSet
-Queue e subclasses (menos usados em outros lugares, exceto simultaneidade)
Tendo dito tantas razões pelas quais esses recipientes são amplamente utilizados, o primeiro ponto deve serEstrutura de dadosRazão.
Do ponto de vista da estrutura de dados,
ArrayList é uma tabela linear (generalizada) e LinkedList é uma lista vinculada.
Mapa é um par de valores-chave.
Conjunto é uma coleção não ordenada sem repetir elementos.
Fila
Então, por que não há pilha?
A resposta é que existe uma pilha. Na versão inicial, existe uma pilha baseada em vetor. Sabendo disso, você sabe que o
criador herda diretamente a pilha baseada em vetor para simplificar. Para a pilha, operações de inserção e exclusão frequentes são, sem dúvida, para matrizes É um desastre e contém um método intermediário, que é inconsistente com a própria estrutura de dados.
EntãoNão recomendado Pilha e vetor
Para a pilha, o LinedList pode atender totalmente a todas as necessidades da pilha. O LinkedList também pode substituir completamente a Fila.
Roubar uma foto ainda é muito claro
Impressão em contêiner
A impressão em contêiner chama o método toString () por padrão. Pode ser reescrita, se necessário, mas não é recomendável reescrever diretamente, use o modo adaptador para reescrever.
Muito simples
public class Test {
public static void main(String[] args){
Random random = new Random(11);
List<Integer> list = new ArrayList<>();
Map<Integer,Integer> map = new TreeMap<>();
Set<Integer> set = new LinkedHashSet<>();
for(int i=0;i<5;i++){
list.add(random.nextInt(10));
map.put(i,random.nextInt(10));
set.add(random.nextInt(10));
}
System.out.println(list.toString());
System.out.println(map);
System.out.println(set);
}
}
O resultado:
[8, 5, 0, 7, 7]
{0=8, 1=3, 2=3, 3=4, 4=9}
[1, 7, 3, 4, 2]
Adicionar e excluir contêineres
Para classes na interface Collection
boolean add(E e);
boolean remove(Object o);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
Mapa
void putAll(Map<? extends K, ? extends V> m);
void clear();
V put(K key, V value);
default boolean remove(Object key, Object value) ;
Iteração ou travessia do contêiner
1. Passagem do Iterador
Para contêineres de coleção, é necessário chamar apenas o método iterator (). Basta obter o objeto iterador.
Para objetos de mapa, apenas o objeto de entrada possui um método iterador
public static void main(String[] args){
Random random = new Random(11);
List<Integer> list = new ArrayList<>();
Map<Integer,Integer> map = new TreeMap<>();
Set<Integer> set = new LinkedHashSet<>();
for(int i = 0;i < 5;i++){
list.add(random.nextInt(10));
map.put(i,random.nextInt(10));
set.add(random.nextInt(10));
}
// 获取迭代器对象
Iterator<Integer> iterator1 = list.iterator();
Iterator<Integer> iterator2 = set.iterator();
Iterator<Map.Entry<Integer,Integer>> iterator3= map.entrySet().iterator();
while (iterator1.hasNext()){
System.out.print(iterator1.next()+" ");
}
System.out.println();
while (iterator2.hasNext()){
System.out.print(iterator2.next()+" ");
}
System.out.println();
while (iterator3.hasNext()){
Map.Entry entry = iterator3.next();
System.out.print(entry.getKey()+":"+entry.getValue()+" ");
}
System.out.println();
}
8 5 0 7 7
1 7 3 4 2
0:8 1:3 2:3 3:4 4:9
2. A interface Iterável pode ser percorrida para cada
public static void main(String[] args){
Random random = new Random(11);
List<Integer> list = new ArrayList<>();
Map<Integer,Integer> map = new TreeMap<>();
Set<Integer> set = new LinkedHashSet<>();
for(int i=0;i<5;i++){
list.add(random.nextInt(10));
map.put(i,random.nextInt(10));
set.add(random.nextInt(10));
}
for(Integer num: list){
System.out.print(num+" ");
}
System.out.println();
for(Integer num: set){
System.out.print(num+" ");
}
System.out.println();
for(Map.Entry entry :map.entrySet()){
System.out.print(entry.getKey()+":"+entry.getValue()+" ");
}
System.out.println();
}
8 5 0 7 7
1 7 3 4 2
0:8 1:3 2:3 3:4 4:9