Qual é a diferença entre uma coleção ordenada e uma coleção ordenada?


132

Existe alguma diferença entre um ordenada e um ordenado coleção?


1
Não tome as respostas aqui muito literalmente. Embora esse seja o tipo de definição amplamente compreendida e reconhecida, não é a definição de fato na terminologia do computador. Por exemplo, no .NET, a interface para enumerável "classificada" é chamada IOrderedEnumerable (o engraçado é que não é muito consistente no .NET. Uma "ordem de inserção" no dicionário do .NET é chamada, OrderedDictionaryque alguns acreditam ser um nome impróprio em comparação com, IndexedDictionary) . Sim, no mundo java (principalmente em outros lugares também), eles significam o que você tem nas respostas. Para mais, veja aqui .
Nawfal 21/05

Se alguma instância de implementação errar na nomeação, não há razão para propagar seu erro. É uma boa pergunta, com boas respostas. Use nomes adequados - ajuda a reduzir a confusão para todos, inclusive para você.
foo

Respostas:


166

Uma coleção ordenada significa que os elementos da coleção têm uma ordem específica. A ordem é independente do valor. Uma lista é um exemplo.

Uma coleção classificada significa que não apenas a coleção tem ordem, mas a ordem depende do valor do elemento. Um SortedSet é um exemplo.

Por outro lado, uma coleção sem qualquer ordem pode manter os elementos em qualquer ordem. Um conjunto é um exemplo.


1
A fila de prioridade é uma coleção solicitada?
overexchange

@overexchange Dadas as definições acima, uma fila de prioridade seria uma coleção classificada na maioria dos casos, uma vez que a prioridade é quase sempre definida como uma propriedade dos elementos na fila.
Cdeszaq 26/10/19

Se SortedSet herdou de Set e está tendo um relacionamento é um com ele, então, como u pode dizer Set é, sem qualquer ordem
xpioneer

79

Uma coleção ordenada mantém a ordem dos elementos com base na sequência em que você coloca / remove itens da coleção.

Uma coleção classificada mantém os elementos classificados com base em um critério de classificação.


18

Java usa "coleção ordenada" para significar uma coleção como List, onde (diferentemente do HashSet), a coleção lembra em que ordem os elementos devem estar. Portanto, os elementos podem ser adicionados à coleção em um "local" específico na ordem .

Java usa "coleção classificada" para significar uma coleção como SortedSet, onde (diferentemente da Lista), a ordem pela qual o iterador percorre a coleção está de acordo com um Comparador especificado ou a ordem natural dos elementos.

Portanto, a diferença é se a ordem depende dos valores ("classificados") ou se é uma propriedade que os elementos possuem independentemente de seu valor ("ordenados").


1
Boa resposta e +1 por mencionar "Java". É meio que a definição aceita na maioria dos lugares também, como OrderedDictem python. Mas no .NET a interface para enumerável "classificada" é chamada IOrderedEnumerable. Então depende. Só
estou

9

Sim, embora os conceitos sejam semelhantes.

List é uma coleção ordenada: cada elemento possui um índice, que forma uma ordem dos elementos, mas geralmente não está relacionada a nenhuma propriedade dos próprios elementos.

SortedMape SortedSetsão coleções classificadas, o que significa que a iteração através da coleção ocorrerá em uma sequência derivada dos próprios elementos. Por exemplo, se você tiver um SortedSet<String>, as Strings serão classificadas de acordo com a ordem de classificação lexicográfica.

Uma coleção ordenada pode ser classificada, mas não precisa ser (por exemplo, após o uso Collections.sort()) quando a ordem externa é idêntica à ordem de classificação dos elementos. Uma coleção ordenada é sempre implicitamente ordenada (ou seja, sempre existe um elemento "primeiro" e é sempre o mesmo, desde que você não adicione outra, menor).


5

Uma coleção ordenada é uma coleção que monitora um índice consecutivo no qual cada elemento é inserido.

Uma coleção ordenada é uma coleção ordenada quando a ordem depende adicionalmente do valor do elemento a ser inserido, durante o uso da interface Comparável, que fornece um método para definir os critérios de classificação.

Espero que possa ajudar.


2

A classificação implicaria a encomenda de acordo com uma implementação do Comparable ou Comparator. O pedido implicaria que ele está seguindo o pedido de inserção ou alguma outra definição de pedido consistente e definida, mas arbitrária.

Portanto, uma lista classificada de strings seria classificada de acordo com o método String.compareTo. Uma lista pode conter uma lista de cadeias inseridas em ordem arbitrária, mas essa ordem sempre permanecerá a mesma.

Obviamente, existem métodos na classe Coleções para classificar uma lista.


1

Uma coleção classificada geralmente significa que os elementos são classificados do valor mínimo ao valor máximo ou vice-versa, dependendo do (s) atributo (s) dos elementos nos quais os algoritmos funcionam.

para coleções interger, o ordenado pode ser de número mínimo para número máximo para uma coleção de pessoas, pode ser afetado pela altura das pessoas ou pelo peso das pessoas, etc.

Quando se fala em ordem, geralmente significa a ordem de inserção. A ordem pode ser alterada após a classificação


0

Coleção Ordenada vs. Coleção Ordenada

1. Coleção ordenada

Uma coleção classificada está classificando uma coleção utilizando os recursos de classificação fornecidos pela estrutura de coleções Java. A classificação ocorre na memória da JVM que executa o Hibernate, após os dados serem lidos no banco de dados usando o comparador java.

Se sua coleção não for grande, será uma maneira mais eficiente de classificá-la. Como acontece na memória jvm, pode gerar um erro de falta de memória.

2. Coleta de pedidos

A coleção de pedidos está classificando uma coleção especificando a cláusula order-by na consulta para classificar essa coleção durante a recuperação. Se sua coleção for muito grande, será uma maneira mais eficiente de classificá-la. É rápido em comparação com a coleção classificada.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.