Se você achar que existe um método de definição em uma interface:
public string [] getParameters ();
Então você deve refletir seriamente. A matriz não é apenas antiga, mas temos razões razoáveis para evitar a exposição. Neste artigo, tentarei resumir os defeitos da API Java. Comece com um dos exemplos mais inesperados.
A matriz leva a um desempenho ruim
Você pode pensar que o uso de matrizes é o mais rápido porque a matriz é a estrutura de dados subjacente implementada pela maioria das coleções. Como o uso de um grupo de números puro pode usar um objeto de matriz?
Vamos começar com esse uso de hábito comum que parece familiar:
Public string [] getNames () {return nameslist.toarray (new string [nameslist.size ()]);} Este método cria um dados de uma coleção de variáveis, onde seus dados de preservação interna são usados é mais lento (consulte a barra verde vs laranja no gráfico):
public String [] getNames () {return nameslist.toarray (new string [0]);} No entanto, se o método retornar uma lista, a criação de uma cópia defensiva é mais rápida (barra vermelha):
List public <string> getNames () {return new ArrayList (nameslist);} A diferença é que um Arraylist colocou seu item de dados em uma matriz de objeto [] e usa um tipo de método de padrões, que é muito mais rápido que o tipo de método (barra azul) Nenhum tipo de matriz, o encapsulamento é encapsulado no tipo genérico do compilador.
Esse ícone mostra um padrão de referência para n = 5 no Java 7. No entanto, mais itens de dados ou outro sistema de situação da VM, essa imagem não mudará muito. convertido em uma coleção para usá -la para fazer qualquer coisa e converter o resultado de volta a uma matriz para enviá -la para outro método de interface, e assim por diante.
Ele usa uma lista simples em vez de uma matriz para melhorar o desempenho bytes.
Usando uma coleção, você pode até decidir retornar uma versão não modificada da lista interna:
List public <string> getNames () {return collectionS.unmodifiableList (nameslist);}Esta operação será executada a um preço de mercado fixo, então ele é muito mais rápido do que qualquer outro método (barra amarela). Um incapaz de modificar a alteração mudará quando seus dados internos mudarem. Se a alteração ocorrer, o cliente é executado para uma concorrente, quando os itens de dados iterados. , será uma escolha de alto desempenho-algumas coisas que não podem ser implementadas por matrizes.
A matriz define uma estrutura, não uma interface
Java é uma linguagem orientada a objeto. O conceito principal de objeto -orientado é fornecer alguns métodos para acessar e operar seus dados em vez de operar diretamente o domínio de dados.
Como o JAVA projetou o desempenho, os tipos e matrizes nativos foram integrados no sistema de tipos. de acesso direto, você não tem muitas outras coisas para fazer na matriz.
String [] Array = {"Foo", "Bar"}; Println (Array); "," Bar "}) // -> falseDiferente da matriz, a API de coleta fornece muitos métodos úteis para acessar os elementos. e mantenha o princípio da implementação ao mesmo tempo.
Usando um dados, você define onde os dados são preservados na memória.
A matriz não é um tipo seguro
Se você confiar no tipo de verificação do compilador, tenha cuidado com a matriz de objeto.
Número [] Números = Novo Inteiro [10];
A razão é que a matriz é "colaborativa". Cobrindo todas as teorias e todas as teorias, todo desenvolvedor Java deve ler.
Devido a esse comportamento, a interface do tipo de matriz exposta permite um sub -tipo de uma declaração do tipo de matriz, que causa uma anormalidade estranha de tempo de execução.
Bloch também explicou que a matriz não é compatível com o tipo genérico.
-Joshua Block, EFEITOR Java (2ª edição), Artigo 29
Resumir
A estrutura da linguagem da camada inferior da matriz e eles serão usados na implementação, mas não devem pensar em outras classes. .