¿Por qué las colecciones de Java no pueden almacenar tipos primitivos directamente?

Los tipos primitivos son los tipos de datos más básicos disponibles en el lenguaje Java. Dichos tipos tienen un solo propósito: contener valores puros y simples de un tipo. Dado que java es un lenguaje de tipo estático donde cada variable y tipo de expresión ya se conoce en tiempo de compilación, por lo tanto, no puede definir una nueva operación para tales tipos primitivos.

Ilustración:

Invalid : vector.addElement(3) ;
Valid   : vector.addElelment("3") ;

Conclusión:

  • Los tipos primitivos de Java no son tipos referenciados. Por ejemplo, int no es un objeto.
  • Java hace genéricos utilizando el borrado de tipos de tipos de referencia. Por ejemplo, A List<?> es realmente un List<Object> en tiempo de ejecución.

Las colecciones son el marco utilizado para almacenar y manipular un grupo de objetos. Colección Java significa una sola unidad de objetos. Dado que las dos afirmaciones anteriores son verdaderas, las colecciones genéricas de Java no pueden almacenar tipos primitivos directamente.

Wrapper Class proporciona una forma de usar tipos de datos primitivos (int, boolean, etc.) como objetos o una clase Wrapper es una clase cuyo objeto envuelve o contiene tipos de datos primitivos. Da a luz a dos conceptos de la siguiente manera:

  1. autoboxeo
  2. Desembalaje
Tipo de datos primitivos Clase contenedora
byte Byte
corto Corto
En t Entero
largo Largo
flotar Flotar
doble Doble
booleano booleano
carbonizarse Personaje

Autoboxing es la conversión automática de tipos primitivos al objeto de sus clases contenedoras correspondientes que se conoce como autoboxing. Por ejemplo:

  • Conversión de int a entero
  • Conversión de largo a largo
  • Conversión de doble a doble, etc.

Unboxing es solo el proceso inverso al autoboxing. La conversión automática de un objeto de una clase contenedora a su tipo primitivo correspondiente se conoce como unboxing. Por ejemplo: conversión de Integer a int, Long a long, Double a double, etc.

Ilustración: Autoboxing

Java

// Importing input output classes
import java.io.*;
 
class GFG {
 
    // Main driver method
    public static void main(String args[])
    {
 
        // Custom input
        Integer i = new Integer(21);
 
        // Boxing
        Integer j = 5;
        System.out.println("i=" + i + "\n j=" + j);
    }
}

Producción:

i=21
j=5

Ilustración 2: Desembalaje 

Java

// Import input output classes
import java.io.*;
 
// Class
public class GFG {
 
    // MAin driver method
    public static void main(String args[])
    {
 
        // Custom input
        Integer i = new Integer(50);
 
        // Unboxing
        int a = i;
 
        // Unboxing
        int b = i.intValue();
 
        // Print and display
        System.out.println("a=" + a + "\nb=" + b);
    }
}

Producción: 

a=50
b=50

Implementación: mientras usa el compilador java de la colección, cree un objeto contenedor del tipo primitivo y agréguelo a la colección usando genéricos .

Ejemplo 1: 

Java

// Java Program to illustrate Collections
// are not directly storing primitives types
 
// Importing input output classes
import java.io.*;
// Importing all classes from
// java.util package
import java.util.*;
 
// Class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating a list of elements of Integer type.
        List<Integer> list = new ArrayList<Integer>();
 
        // Iterating over elements of List object
        for (int i = 0; i < 10; i++) {
            // Adding the int primitives type values
 
            // If elements are added  using add() method
            // then compiler automatically treats as
            // add(Integer.valueOf(i))
            list.add(i);
            //  This is what compiler does and
            // hence the goal achieved.
 
            // Print the primitive values
            System.out.println(i);
        }
    }
}
Producción

0
1
2
3
4
5
6
7
8
9

Ejemplo 2: colecciones para almacenar tipos de datos primitivos 

Java

// Java Program to illustrate Collections
// are not directly storing primitives types
 
// Importing Map and HashMap classes
// from java.util package
import java.util.HashMap;
import java.util.Map;
 
// Class
public class GFG {
 
    // Main driver method
    public static void main(String[] args) throws Exception
    {
 
        // Creating an object of Map type
        Map map = new HashMap();
 
        // Creating int wrapper object
        // Custom input
        Integer var = new Integer(21);
 
        // Storing int to map
        map.put("key", var);
 
        // Getting int value from map
        Integer refVar = (Integer)map.get("key");
 
        // Get the integer value from wrapper object
        int i = refVar.intValue();
       
      // Display message for successful compilation
      System.out.print("Successfully compiled and executed");
    }
}

Producción: 

Successfully compiled and executed

Publicación traducida automáticamente

Artículo escrito por aarushi_bagri y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *