Visão geral da coleção de coluna única Java

Sistema de coleta Java

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

  1. Atravessando o iterador , a coleção chama o método iterador para obter um objeto Iteratora, o iterador fornece os seguintes métodos
  2. 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

  1. ArrayList
  2. 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:

Insira a descrição da imagem aqui
Tabela de hash

Insira a descrição da imagem aqui

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;
    }
}

Acho que você gosta

Origin blog.csdn.net/weixin_42143994/article/details/113486929
Recomendado
Clasificación