2015-10-30 9 views
5

Ho affrontato la domanda di intervista di seguito.puzzle intervista Java relativo al set

qual è l'output del codice riportato di seguito.

package com.demo; 

import java.util.HashSet; 
import java.util.Set; 

public class Test { 

    public static void main(String[] args) { 
    Set<Short> set=new HashSet<Short>(); 

     for (short i = 0; i < 10; i++){ 
      set.add(i); 
      set.remove(i-1); 
     } 

     System.out.println(set.size()); 
    } 
} 

Si sta dando uscita: 10

Ma io sono confondere il motivo per cui la sua uscita 10.

Qualcuno mi può rispondere si prega di quello che succede qui.

Grazie

SItansu

risposta

5

Il valore letterale 1 è di tipo int. Il valore i - 1 è quindi di tipo int e non di tipo short come i. Stai quindi aggiungendo istanze in scatola di Short all'insieme, ma rimuovendo le istanze in scatola di Integer. Il metodo remove() pertanto non rimuove nulla, poiché un Short non è uguale a Integer.

+1

Vale anche la pena notare che non viene visualizzato un avviso o un errore per le mancate corrispondenze di tipo, poiché la rimozione è definita per accettare un argomento di tipo 'Object' anche per' Set '. –

+0

Il compilatore è davvero felice. Il mio IDE, tuttavia (IntelliJ) è abbastanza intelligente da avvertirmi su questo probabile bug. –

+0

Ah, sto usando eclipse al momento, ma non mostra nulla per questo. Sospiro. (Probabilmente ha un setting per questo da qualche parte però ....) –

5

L'espressione i-1 è di tipo int e viene autoboxed ad un oggetto intero, in modo che il programma è l'aggiunta di oggetti brevi al set e quindi tenta di rimuovere oggetti interi. Il set non ha oggetti Integer, quindi nulla viene mai rimosso.