ArrayList vs List

StackOverflow https://stackoverflow.com/questions/391088

  •  23-08-2019
  •  | 
  •  

Pergunta

Eu vi essa resposta de Jon sobre objeto genérico Inicializar com tipo desconhecido :

Se você quer uma única coleção para conter vários tipos não relacionados de valores, no entanto, você terá que usar List<object>

Eu não estou comparando ArrayList vs List<>, mas ArrayList vs List<object>, como ambos serão expor elementos do tipo object. Qual seria o benefício da utilização de qualquer um neste caso?

EDIT: Não é nenhuma preocupação com a segurança tipo aqui, já que tanto a classe está expondo object como seu item. Uma ainda precisa fundido a partir de object para o tipo desejado. Estou mais interessado em outra coisa senão segurança de tipo.

Edit: Obrigado Marc Gravell e Sean para a resposta. Desculpe, eu só pode escolher 1 como resposta, então eu vou até votar ambos.

Foi útil?

Solução

Você vai ser capaz de usar os métodos de extensão LINQ diretamente com List<object>, mas não com ArrayList, a menos que você injetar um Cast<object>() / OfType<object> (graças a IEnumerable<object> vs IEnumerable). Que vale a pena um pouco, mesmo que você não precisa digitar a segurança etc.

A velocidade será sobre o mesmo; estruturas ainda serão encaixotados, etc - então não há muito mais para distingui-los. Só que eu tendem a ver ArrayList como "oops, alguém está escrevendo código legado de novo ..." ;-p

Outras dicas

Uma grande vantagem de usar List<object> é que estes dias mais código é escrito para usar as classes genéricas / interfaces. Eu suspeito que estes dias a maioria das pessoas iria escrever um método que leva um IList<object> em vez de um IList. Desde ArrayList não implementa IList<object> você não seria capaz de usar uma lista de matriz nestes cenários.

I tendem a pensar nos não-genéricos classes / interfaces como código legado e evitá-los sempre que possível.

Neste caso, ArrayList vs. List<Object> então você não vai notar qualquer diferença na velocidade. Pode haver algumas diferenças nos métodos de reais disponíveis em cada um deles, em particular no .NET 3.5 e métodos de extensão contagem, mas isso tem mais a ver com ArrayList sendo um pouco obsoleto que qualquer outra coisa.

Sim, além de ser typesafe, coleções genéricas pode ser realmente mais rápido.

A partir da MSDN ( http://msdn.microsoft. com / en-us / library / system.collections.generic.aspx )

O System.Collections.Generic namespace contém interfaces e classes que definem genérico coleções, que permitem aos usuários criar rigidez coleções que proporcionar uma melhor segurança de tipo e desempenho do que não-genérico fortemente coleções digitado.

Faça alguma avaliação comparativa e você vai saber o que funciona melhor. I guestimate que a diferença é muito pequena.

List <> é uma versão typesafe de ArrayList. Ele vai garantir que você vai obter o mesmo tipo de objeto na coleção.

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