Pergunta

Qual é a diferença fundamental entre as interfaces Set<E> e List<E>?

Foi útil?

Solução

List é uma seqüência ordenada de elementos enquanto Set é uma lista distinta de elementos que é não-ordenada (obrigado, Quinn Taylor ).

List<E>:

Uma coleção ordenada (também conhecido como um seqüência). O usuário desta interface tem um controlo preciso sobre o local onde na lista é inserido cada elemento. o usuário pode acessar elementos por sua índice inteiro (posição na lista), e procurar elementos na lista.

Set<E>:

Uma coleção que não contém elementos duplicados. Mais formalmente, conjuntos contêm nenhum par de elementos e1 e e2 de modo que e1.equals (e2), e em mais um elemento nulo. Como implícito seu nome, esta interface de modelos os matemática set abstração.

Outras dicas

╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝

As listas ordenadas de elemento (único ou não)
Em conformidade com a interface de Java chamado List
Pode ser acessado pelo índice

implemetented usando

  • LinkedList
  • ArrayList

As listas de elementos exclusivos:
Em conformidade com a interface de Java chamado Set
Pode não ser acessado pelo índice

implemetented usando

  • HashSet (unordered)
  • LinkedHashSet (ordenado)
  • TreeSet (ordenados por ordem natural ou pelo comparador fornecida)

As duas interfaces Set e List em conformidade com a interface do Java chamado Collection

Um conjunto não pode conter elementos duplicados, enquanto uma lista pode. A List (em Java) também implica ordem.

  • A lista é uma ordenou agrupamento de itens
  • Um conjunto é um agrupamento desordenada de itens sem duplicatas permitido (geralmente)

Conceitualmente que geralmente se referem a um agrupamento desordenado que permite duplicatas como um saco e não permite duplicatas é um conjunto.

Lista

  1. é um agrupamento ordenado de elementos.
  2. lista é usada para recolha de elementos com duplicatas.
  3. Novos métodos são definidos dentro de Lista interface.

Set

  1. é um agrupamento não ordenada de elementos.
  2. Set é usado para recolha de elementos sem duplicatas.
  3. Não há novos métodos são definidos dentro da interface Set, por isso temos de usar métodos de interface de colheita apenas com o conjunto de subclasses.

Lista:

Lists geralmente permitem objetos duplicados. Lists devem ser solicitados, e, portanto, são acessíveis por índice.

classes de implementação incluem: ArrayList, LinkedList, Vector

Set:

Sets fazer não permita que objetos duplicados. A maioria das implementações são desordenadas, mas é implementação específica.

classes de implementação incluem: HashSet (desordenada), LinkedHashSet (ordenado), TreeSet (ordenados por ordem natural ou pelo comparador fornecida)

Como nós estamos falando sobre as interfaces Java, por que não olhar para o Javadoc?!

  • Um List é uma colecção ordenada (sequência), o que normalmente permite duplicatas
  • A Set um é coleção que não contém elementos duplicados, iteração ordem pode ser garantida pela implementação

Não há nenhuma menção sobre a falta de ordem relativamente Sets:. Depende da implementação

Esta pode não ser a resposta que você está procurando, mas o JavaDoc das classes de coleções é realmente muito descritivo. Copiar / colar:

Uma coleção ordenada (também conhecido como um seqüência). O usuário desta interface tem um controlo preciso sobre o local onde na lista é inserido cada elemento. o usuário pode acessar elementos por sua índice inteiro (posição na lista), e procurar elementos na lista.

conjuntos Ao contrário, listas permitem tipicamente elementos duplicados. Mais formalmente, listas permitem que geralmente pares de elementos E1 e E2, tal que e1.equals (e2), e eles tipicamente permitem que vários elementos nulos se permitir que elementos nulos em tudo. Não é inconcebível que desejo que alguém poderia para implementar uma lista que proíbe duplicatas, por tempo de execução de arremesso exceções quando o usuário tenta inseri-los, mas esperamos que esse uso a ser raras.

Um conjunto é um grupo não-ordenada de objetos distintos - sem objetos duplicados são permitidos. É geralmente implementada utilizando o código de hash dos objetos que estão sendo inseridos. (Implementações específicas podem adicionar ordenação, mas o conjunto de interface em si não faz.)

A lista é um grupo ordenada de objetos que podem conter duplicatas. Pode ser implementado com um ArrayList, LinkedList, etc.

1.Lista permite valores duplicados e conjunto does'nt permite duplicatas

2.List mantém a ordem em que você inseriu elementos para a lista Set Does'nt manter a ordem. 3.List é uma sequência ordenada de elementos enquanto que Set é uma lista de elementos distintos que é não ordenada.

Lista Vs Set

1) Set não permite duplicatas. Lista permite duplicado. Com base na implementação de Set, também mantém a ordem de inserção.

por exemplo: LinkedHashSet. Ele mantém a inserção order.Please referem clique aqui

2) contém método. Por natureza do Conjunto ele vai dar um melhor desempenho para acesso. Melhor caso seu o (1). Mas List tem problema de desempenho para contains invoke.

Lista:
Lista permite elementos e valores nulos duplicado. Fácil de pesquisar usando o índice correspondente dos elementos e também irá exibir os elementos na ordem de inserção. Exemplo: (ListaLigada)

import java.util.*;

public class ListExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    List<Integer> l=new LinkedList<Integer>();
    l.add(001);
    l.add(555);
    l.add(333);
    l.add(888);
    l.add(555);
    l.add(null);
    l.add(null);

    Iterator<Integer> il=l.iterator();

    System.out.println(l.get(0));

    while(il.hasNext()){
        System.out.println(il.next());
    }

    for(Integer str : l){
        System.out.println("Value:"+str);
    }
 }

}

Output:

1 | 1 | 555
333
888
555
nula
nula
Valor: 1 | Valor: 555
Valor: 333
Valor: 888
Valor: 555
Valor: null
Valor: null

Set:
Set não é permitir que quaisquer elementos duplicados e permitir única nula value.It não manterá qualquer ordem para exibir elements.Only TreeSet serão exibidos em ordem crescente.

Exemplo: (TreeSet)

import java.util.TreeSet;

public class SetExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    TreeSet<String> set = new TreeSet<String>();
    try {
        set.add("hello");
        set.add("world");
        set.add("welcome");
        set.add("all");

        for (String num : set) {
            System.out.println( num);

        }
        set.add(null);
    } catch (NullPointerException e) {
        System.out.println(e);
        System.out.println("Set doesn't allow null value and duplicate value");
    }

 }

}

Output:

todos
Olá
bem-vindo
mundo
java.lang.NullPointerException
Set não permite valor nulo e valor duplicado

Todas as classes List manter a ordem de inserção. Eles usam diferentes implementações com base no desempenho e outras características (por exemplo ArrayList para a velocidade de acesso de um índice específico, LinkedList para simplesmente manter a ordem). Como não há nenhuma chave, duplicatas são permitidas.

As classes Set não manter a ordem de inserção. Eles podem, opcionalmente, impor um fim específico (como com SortedSet), mas tipicamente têm uma ordem definida pela implementação baseada em alguma função hash (como com HashSet). Desde Sets são acessados ??por chave, duplicatas não são permitidas.

Ordenação ... a lista tem uma ordem, um conjunto não funciona.

Poucos nota diferenças dignas entre List e Set em Java são dadas como segue abaixo:

1) diferença fundamental entre List e Set in Java está permitindo que elementos duplicados. Lista em Java permite duplicatas, enquanto Set não permite qualquer duplicado. Se você inserir duplicado em conjunto que irá substituir o valor mais velho. Qualquer implementação de Set em Java só vai contém elementos únicos.

2) Outra diferença significativa entre List e Set in Java é ordem. Lista é uma coleção ordenada, enquanto Set é uma coleção não-ordenada. Lista mantém a ordem de inserção de elementos, significa qualquer elemento que é inserido antes vai continuar índice mais baixo do que qualquer elemento que é inserido depois. Situado em Java não mantém qualquer ordem. Embora Set fornecer outra alternativa chamada SortedSet que pode armazenar elementos de pôr em ordem de classificação específica definida por métodos comparáveis ??e comparador de objetos armazenados em Set.

3) implementação Popular da interface List em Java inclui ArrayList, Vector e LinkedList. Embora a implementação popular de interface do Conjunto inclui HashSet, TreeSet e LinkedHashSet.

Sua bastante claro que, se você precisa para manter a ordem de inserção ou objeto e você coleção pode conter duplicatas que lista é um caminho a percorrer. Por outro lado, se a sua exigência é para manter a colecção única sem quaisquer duplicatas do que Set é o caminho a percorrer.

Lista:

  1. duplicatas permitidos.
  2. ordenada no agrupamento de elementos. (Em outras palavras que têm necessidade order.No definitiva para classificados em ordem crescente)

Set:

  1. duplicatas Não permitido.
  2. não ordenada no agrupamento de elementos. (Em outras palavras não tendo nenhum poder order.It definitiva ou não dispostos em ordem crescente)

Set<E> e List<E> são ambos usados ??para armazenar elementos do tipo E. A diferença é que Set é armazenada em forma desordenada e não permite valores duplicados. List é usado para armazenar elementos em forma ordenada e ele permite valores duplicados.

elementos Set não pode ser acedido por um índice de posição, e elementos List pode ser acedida com um índice de posição.

Hi muitas respostas já estão given..Let-me salientar alguns pontos que não são mencionados até agora:

  • A maioria das implementações Lista (ArrayList, Vector) implementar RandomAccess de interface que é uma interface de marcador para acesso rápido. Nenhuma das implementações Set fazer isso.
  • Lista utiliza um Iterator especial chamado ListIterator que suporta iteração em ambas as direções . Set usa Iterator que suporta apenas 1 maneira iteração
  • HashSet leva 5,5 vezes mais memória que ArrayList para armazenar mesmo número de elementos.

Aqui ist um exemplo claro com Groovy. i criar um conjunto e uma lista. então eu tentar armazenar 20 valor gerado aleatoriamente dentro de cada lista. o valor gerado pode estar no intervalo de 0 a 5

s = [] as Set
l = []

max = 5
print "random Numbers :"
20.times{
e = (int)Math.random()*max
s << e
l << e
print "$e, "
}


println "\n"
println "Set : $s "
println "list : $l

O resultado:

Números aleatórios: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3

Set: [4, 1, 0, 2, 3]

lista: [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]

Você pode ver que a diferença é que:

  • Set não permite valores duplicados.
  • Lista permitir valores duplicados.

Como a resposta como SET não tem valor duplicado e lista pode. Claro, a ordem é outra coisa a diferentes los.

Set: Um conjunto não pode ter elementos duplicados em suas coleções. é também uma coleção não-ordenada. Para acessar os dados a partir de Set, que é necessário para usar Iterator única e índice baseado recuperar não é possível para ele. É usado principalmente sempre que necessário coleção singularidade.

Lista: A lista pode ter elementos duplicados, com o natural encomendado como ele está inserido. Assim, ele pode ser recuperado de dados com base no índice de iteração ou. É amplamente utilizado para coleta de loja que precisa de acesso com base no índice.

Nome do tópico: Lista VS Set

Eu já passamos por tópico mais importante de Java chamado Collections Framework. Eu pensei para compartilhar meu pequeno conhecimento sobre coleções com você. List, Set, Map são o tema mais importante dele. Então, vamos começar com List e Set.

A diferença entre List e Set:

  1. Lista é uma classe de coleção que estende a classe AbstractList onde, como Set é uma classe de coleção que estende a classe AbstractSet mas ambos os implementa a interface Collection.

  2. interface List permite valores duplicados (elementos) enquanto interface de Set não permite valores duplicados. No caso de elementos duplicados em Set, ele substitui valores mais antigos.

  3. interface List permite valores nulos onde, como interface de Set não permite valores nulos. Em caso de utilização de valores nulos em Set dá NullPointerException.

  4. interface List mantém a ordem de inserção. Isso significa que a nossa forma de adicionar os elementos na lista da mesma forma que nós obtê-lo usando iterator ou para-cada estilo. Considerando implementações Set não necessariamente manter a ordem de inserção. (Embora SortedSet faz usando TreeSet, e LinkedHashSet mantém a ordem de inserção).

  5. interface List tem seus próprios métodos definidos enquanto interface de Set não tem o seu próprio método de modo Set usa apenas métodos de interface Collection.

  6. interface List tem um legado classe chamada Vector enquanto interface de Set não tem qualquer classe legado

  7. Por último, mas não menos importante ... O método listIterator() só pode ser usado para percorrer os elementos da Lista Classes enquanto podemos usar iterator () para elementos de classe de acesso Set

Qualquer outra coisa que podemos acrescentar? Por favor, deixe-me saber.

Graças.

Set:

Não pode ter valores duplicados Ordenação depende da implementação. Por padrão, ele não é ordenado não pode ter acesso por índice

Lista:

Pode ter valores duplicados Ordenados por padrão Pode ter acesso por índice

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top