Comprensione dei modelli di progettazione utilizzando Arrays.sort () [closed]

-2

Se abbiamo un array in Java come questo -

int[] arr = new int[10];

Quindi è ordinato in questo modo -

Arrays.sort(arr);

Invece di questo, se avessimo una LinkedList -

LinkedList <Integer> ll = new LinkedList();

Lo classificheremo in questo modo:

 Collections.sort(ll);

Come può essere spiegato usando schemi di progettazione? Perché questo design è di un tipo particolare? Perché non avere solo un metodo nella matrice proprio come abbiamo metodi per aggiungere elementi -

arr.sort();
ll.sort();

Voglio capire la logica interna del design orientato agli oggetti per avere array e collezioni da ordinare, piuttosto che gli oggetti stessi con un metodo.

    
posta sbhatla 07.10.2017 - 17:51
fonte

2 risposte

4

È semplicemente che i progettisti Java desideravano mantenere gli array come tipi di dati molto semplici e lasciare che classi come ArrayList fossero astratte su di loro. Pertanto, gli array non hanno metodi (eccetto quelli ereditati da Object) e un campo (lunghezza). Questo è un passo avanti rispetto a C, dove l'equivalente degli array è puntatori a numeri variabili di elementi sull'heap, e non hanno nemmeno un campo dimensione o un controllo vincolato.

Per quanto riguarda la seconda domanda sul motivo per cui non possiamo avere List.sort - possiamo . Semplicemente non è definito nelle implementazioni delle liste, ma nell'interfaccia Elenco, come metodo predefinito. Il motivo per cui esiste anche Collections.sort è dovuto al fatto che i metodi predefiniti non sono stati aggiunti fino a Java 8 e rendendo ogni ordinamento di implementazione di implementazione di elenchi risulterebbe in un codice duplicato

    
risposta data 07.10.2017 - 17:58
fonte
3

Le matrici in Java non hanno alcun metodo di istanza (eccetto quelle ereditate da Object che hanno tutti gli oggetti). Non esiste una comune classe di base Array di cui le matrici sono istanze, piuttosto sono istanze dello specifico tipo di matrice, ad es. int[] , String[] ecc. che sono gestiti appositamente dal compilatore. Quindi in pratica non c'è spazio per definire i metodi di istanza per gli array.

Dato che gli array non supportano i metodi di istanza, è naturale posizionare operazioni come Sort in una classe di utilità separata. Quindi questo non è dovuto ad alcun modello di design specifico, ma a causa dei vincoli nella progettazione del linguaggio.

    
risposta data 08.10.2017 - 12:57
fonte

Leggi altre domande sui tag