Coleção
Coleção é a implementação de nível superior de uma coleção de coluna única. É uma interface e fornece os seguintes métodos
Nome do método | Descrição |
---|---|
adição booleana (E e) | Adicionar elemento |
boolean remove (objeto o) | Remova o elemento especificado da coleção |
void clear () | Limpe os elementos da coleção |
boolean contém (objeto o) | Determine se o elemento especificado existe na coleção |
boolean isEmpty () | Determine se a coleção está vazia |
tamanho interno () | O comprimento da coleção, que é o número de elementos na coleção |
Método de travessia de coleção
- Atravessando o iterador , a coleção chama o método iterador para obter um objeto Iteratora, o iterador fornece os seguintes métodos
- Ao aprimorar o loop for
for (nome da variável do tipo de dados do elemento: array / nome do objeto da coleção) { corpo do loop;}
Nome do método | Descrição |
---|---|
boolean hasNext () | Determine se há o próximo elemento no conjunto |
próximo elemento () | Obtenha os elementos da coleção |
Coleção de lista
List ainda é uma interface, fornecendo uma interface mais detalhada
Lista de recursos de coleção :
- Indexado
- Pode armazenar elementos duplicados
- Um método único para acessar coleções de listas ordenadas
Nome do método | Descrição |
---|---|
void add (int índice, elemento E) | Insira o elemento especificado na posição especificada nesta coleção |
E remove (índice interno) | Exclua o elemento no índice especificado e retorne o elemento excluído |
E conjunto (índice interno, elemento E) | Modifica o elemento no índice especificado e retorna o elemento modificado |
E get (índice interno) | Retorna o elemento no índice especificado |
Introdução ao ListIterator
- Obtido pelo método listIterator () da coleção List, portanto, é um iterador exclusivo da coleção List
- Um iterador de lista que permite ao programador percorrer em qualquer direção, modificar a lista durante a iteração e obter a posição atual do iterador na lista
Exceção de modificação simultânea
-
A razão
No processo de passagem do iterador, os elementos na coleção são modificados por meio do objeto da coleção, fazendo com que o iterador obtenha os elementos para determinar que o valor modificado esperado e o valor modificado real são inconsistentes, e uma ConcurrentModificationException aparecerá:
-
Solução
Use o loop for para percorrer e, em seguida, use o objeto de coleção para fazer a operação correspondente
Implementação específica da coleção de listas
- ArrayList
- LinkedList
Recursos:
ArrayList:
- A camada inferior é implementada por um array
- Consulta rápida
- Lento para adicionar e excluir
LinkedList :
- A camada inferior é implementada por uma lista vinculada
- Consulta lenta
- Adicione e exclua rapidamente
LinkedList
Visão geral : como a coleção ArrayList, é a implementação específica de List
Método único
Nome do método | Descrição |
---|---|
public void addFirst (E e) | Insira o elemento especificado no início da lista |
public void addLast (E e) | Anexe o elemento especificado ao final desta lista |
public E getFirst () | Retorna o primeiro elemento desta lista |
public E getLast () | Retorna o último elemento desta lista |
public E removeFirst () | Remova desta lista e retorne o primeiro elemento |
public E removeLast () | Remova desta lista e retorne o último elemento |
Conjunto de coleção
coleção de conjuntos é uma interface
definir recursos de coleção:
- Acesso não ordenado a elementos
- Sem índice, apenas por meio de iterador e aprimorado para travessia
- Não é possível armazenar elementos duplicados
Valor de hash
-
Sobre o valor de hash é um valor do tipo int JDK calculado de acordo com o endereço do objeto ou número ou string
-
Como obter o valor de hash
Public int hashCode () na classe Object: retorna o valor do código hash do objeto
-
Características do valor de hash
- O valor hash retornado ao chamar o método hashCode () várias vezes para o mesmo objeto é o mesmo
- Por padrão, os valores de hash de objetos diferentes são diferentes. O método hashCode () pode ser reescrito para tornar o valor hash de diferentes objetos o mesmo
HashSet
Recursos da coleção HashSet
- A estrutura de dados subjacente é uma tabela hash
- A ordem iterativa da coleção não é garantida, ou seja, a ordem dos elementos pode ser inconsistente com o armazenamento
- Não há nenhum método com índice, então ele só pode ser percorrido por meio do iterador ou aprimorado para o loop
- Uma vez que a interface Set é implementada, o conjunto não pode armazenar elementos duplicados
O princípio da coleção HashSet para garantir a exclusividade dos elementos
1. Calcule o local de armazenamento com base no valor hash do objeto
- Se não houver nenhum elemento na posição atual, armazene-o diretamente
- Se houver um elemento na posição atual, vá para a segunda etapa
2. Compare o valor hash do elemento do elemento atual com o elemento existente
- Se o valor do hash for diferente, armazene o elemento atual
- Se os valores de hash forem iguais, vá para a terceira etapa
3. Compare o conteúdo de dois elementos por meio do método equals ()
-
Se o conteúdo não for o mesmo, armazene o elemento atual
-
Se o conteúdo for o mesmo, o elemento atual não é armazenado
Ilustração:
Tabela de hash
LinkedHashSet
Recursos de coleção LinkedHashSet
- A interface Set implementada pela tabela hash e a lista vinculada tem uma ordem de iteração previsível
- A ordem dos elementos é garantida pela lista vinculada, o que significa que a ordem de armazenamento e recuperação dos elementos é a mesma
- O elemento é garantido como único pela tabela de hash, o que significa que não há elementos duplicados
TreeSet
- Os elementos são ordenados e podem ser classificados de acordo com certas regras, e o método de classificação específico depende do método de construção
- TreeSet (): Classifique de acordo com a ordem natural de seus elementos
- TreeSet (comparador comparador): classificar de acordo com o comparador especificado
- Não há nenhum método com índice, então você não pode usar um loop for comum para atravessar
- Por ser uma coleção Set, não contém uma coleção de elementos repetidos
castanha
package cn.dreamyi.demo1;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class StudentTest {
public static void main(String[] args) {
/**
* List集合 元素有顺序 有索引的方法 元素可重复
* ArrayList 底层采用数组实现 容易查询 不易大量增删
* LinkedList底层采用链表实现 容易增删 不易大量查询
*
* Set集合 元素无序、没有索引、不能重复
* TreeSet 具有排序功能 无序
* HashSet 底层采用哈希表实现 无序 且唯一性
* LinkedHashSet 采用链表和哈希表实现 具有有序和元素不重复特点
*/
/**
* 案例需求
*
* - 用TreeSet集合存储多个学生信息(姓名,语文成绩,数学成绩),并遍历该集合
* - 要求:按照总分从高到低出现
*/
TreeSet<Student> treeSet = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int i = o1.getAllScore() - o2.getAllScore();
i = i==0? o1.getChinese() - o2.getChinese(): i;
i = i==0? o1.getName().compareTo(o2.getName()) : i;
return i;
}
});
Student stu1 = new Student("zhangsan", 96, 98);
Student stu2 = new Student("wangwu", 94, 98);
Student stu3 = new Student("zhaoliu", 90, 100);
Student stu4 = new Student("libai", 90, 100);
Student stu5 = new Student("dufu", 95, 99);
treeSet.add(stu1);
treeSet.add(stu2);
treeSet.add(stu3);
treeSet.add(stu4);
treeSet.add(stu5);
Iterator<Student> iterator = treeSet.iterator();
while (iterator.hasNext()) {
Student stu = iterator.next();
System.out.println(stu.getName() + ","
+ stu.getChinese() + "," + stu.getMath() +","+stu.getAllScore());
}
System.out.println(treeSet.size());
}
}
package cn.dreamyi.demo1;
public class Student{
private String name;
private int chinese;
private int math;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getChinese() {
return chinese;
}
public void setChinese(int chinese) {
this.chinese = chinese;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public Student(String name, int chinese, int math) {
this.name = name;
this.chinese = chinese;
this.math = math;
}
public int getAllScore(){
return this.chinese + this.math;
}
}