首页 > 编程语言 >【Java数据结构】---泛型

【Java数据结构】---泛型

时间:2024-08-11 23:25:28浏览次数:13  
标签:Java int max class --- 泛型 array public

乐观学习,乐观生活,才能不断前进啊!!!

我的主页:optimistic_chen

我的专栏:c语言Java

欢迎大家访问~
创作不易,大佬们点赞鼓励下吧~

文章目录

包装类

在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

装箱和拆箱

装箱操作,新建一个 基本类型对象,将 i 的值放入对象的某个属性中(把基本数据类型变为包装类类型)

拆箱操作:将 Integer 对象中的值取出,放到一个基本数据类型中(把包装类类型变为基本数据类型)

int a=10;
Integer i=Integer.valueOf(a);//显示装箱
int j=i.intValue();//显示拆箱

//在使用过程中,装箱和拆箱带来不少的代码量,所以为了减少开发者的负担,java 提供了自动机制(底层帮我们调用了Integer.valueOf()方法)
Integer i2=(Integer)a;//自动装箱
int j=(int)i;//自动拆箱

相关题目:以下代码的输出结果为?

public class Test {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        Integer c = 200;
        Integer d = 200;
        System.out.println(a == b);
        System.out.println(c == d);
    }
}

也许有些人认为他们是四个各不相同的对象,两个式子都返回false。

实际运行后发现输出:
在这里插入图片描述

实际装箱的源码:
在这里插入图片描述
结论:i应该在一个范围的时候是去数组直接拿值,不再这个范围的时候,他是返回新的对象。新的对象用等号比较,那必然是不一样的。
在这里插入图片描述

泛型

泛型是在JDK1.5引入的新的语法,通俗讲,泛型:是适用于许多类型。 从代码上讲,就是对类型实现了参数化

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。 如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。

class MyArray {
  public Object[] array = new Object[10];
 
  public Object getPos(int pos) {
    return this.array[pos];
 }
  public void setVal(int pos,Object val) {
    this.array[pos] = val;
 }
}
public class Test {
  public static void main(String[] args) {
    MyArray myArray = new MyArray();
    myArray.setVal(0,10);
    myArray.setVal(1,"hello");//字符串也可以存放
    String ret = myArray.getPos(1);//编译报错
    System.out.println(ret);
 }
}

总结:
虽然在这种情况下,当前数组任何数据都可以存放,但是,更多情况下,我们还是希望他只能够持有一种数据类
型。而不是同时持有这么多类型。所以,泛型的主要目的:就是指定当前的容器,要持有什么类型的对象。让编译器去做检查。 此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型

泛型语法

class 泛型类名称  <类型形参列表> {
  // 这里可以使用类型参数
}
class ClassName<T1, T2, ..., Tn> { 

}

泛型类<类型实参>变量名 = new 泛型类<类型实参>(构造方法实参);//定义一个泛型类引用 ,实例化一个泛型类对象
MyArray<Integer> list = new MyArray<Integer>();

//MyArray<Integer> list = new MyArray<>(); // 可以推导出实例化需要的类型实参为 Integer

注意:泛型只能接受类,所有的基本数据类型必须使用包装类!

总结:

  1. 泛型是将数据类型参数化,进行传递
  2. 使用 表示当前类是一个泛型类。
  3. 泛型目前为止的优点:数据类型参数化,编译时自动进行类型检查和转换

擦除机制

在编译的过程当中,将所有的T替换为Object这种机制,我们称为:擦除机制

Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息
在这里插入图片描述

泛型的上届

在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

class 泛型类名称<类型形参 extends 类型边界>{
}
public class MyArray < E extends Number>{
}//只接受 Number 的子类型作为 E 的类型实参

当实现一个泛型类 其中有一个方法 可求数组最大值

class Alg<E extends Compareable<E>>{
       public E findMax(E[] array){
            E max=array[0];
            for(int i=1;i<array.length;i++){
               if(max.compareTo(array[i])<0){
                    max=array[i];
                }
             }
             return max;
        }
 }
 public class Test{
      public static void main(String[] args){
           Interger[] array={1,2,3,4,5};
           Alg<Integer> alg=new Alg<>();
           int a=alg.findMax(array);
           System.out.println(a);
      }
 }

E必须是实现了Compareable接口的

泛型方法

方法限定符<类型形参列表> 返回值类型 方法名称(形参列表{
}

class Alg2{
   public <E extends Compareable<E>> E findMax(E[] array){
      E max=array[0];
      for(int i=1;i<array.length;i++){
           if(max.compareTo(array[i])<0){
                max=array[i];
           }
      }
      return max;
   }
}
public class Test{
      public static void main(String[] args){
           Alg2 alg2=new Alg2<>();
           Interger[] array={1,2,3,4,5};
           int a=alg2.findMax(array);
           System.out.println(a);
      }
 }

静态泛型方法

class Alg3{
   public static <E extends Compareable<E>> E findMax(E[] array){
      E max=array[0];
      for(int i=1;i<array.length;i++){
           if(max.compareTo(array[i])<0){
                max=array[i];
           }
      }
      return max;
   }
}
public class Test{
      public static void main(String[] args){
           Interger[] array={1,2,3,4,5};
           int a=Alg3.findMax(array);//通过类名访问
           System.out.println(a);
      }
 }

完结

好了,到这里Java语法部分就已经结束了~
如果这个系列博客对你有帮助的话,可以点一个免费的赞并收藏起来哟~
可以点点关注,避免找不到我~ ,我的主页:optimistic_chen
我们下期不见不散~~Java

下期预告: Java【数据结构】- - - List

标签:Java,int,max,class,---,泛型,array,public
From: https://blog.csdn.net/optimistic_chen/article/details/140747578

相关文章

  • 【Linux】项目自动化构建工具-make/Makefile(入门初使用)
    make/Makefile1.什么是make/makefile?为什么要使用?2.如何使用make/makefile(1)makefile基础框架1.规则2.规则的实现(2)如何与make搭配使用?3.文件的时间戳4.常用语法补充语法一:.PHNOY文件名语法二:$@与$^语法三:makefile里面可以定义变量参考文章:爱编程的大丙......
  • 编程技巧 --- 远程调试
    引言最近在做的项目上做了一些性能优化的工作,用到了VisualStudio远程调试,所以本篇文章整理一下远程调试技巧。首先,了解一下VisualStudio远程调试是什么?VisualStudio的远程调试功能允许在本地调试远程计算机上运行的应用程序。用远程调试,可以在本地计算机上设置断点、查......
  • swagger-api生成接口文档
    引入swagger-api生成接口文档1.引入pom依赖<!--swagger2依赖--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version&......
  • AI Python for Beginners-Andrew吴恩达-study notes(2)
    1Introduction    itisbelievedthatwiththehelpofAIchatbotwecanlearnpythonmoreeasilyanditwillbeamazingtoautomatetasksusingPython2 CompletingatasklistwithAI2.1List①listisasinglevariableoftype thatholdsm......
  • 34.x86游戏实战-XXX过检测代码分析
    免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!本次游戏没法给内容参考于:微尘网络安全工具下载:链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3提取码:6tw3复制这段内容后打开百度网盘手机App,操作更方便哦上一个内容:33.x86游戏实战-喊话C......
  • 方法的调用(JAVA)
    方法之间允许相互调用,不需要知道方法的具体的实现,实现重用,提高效率。 1.静态方法用静态方法        用静态方法时通过类名.方法名的方法进行调用,当在同一类中时,直接通过方法名进行调用。2.静态方法调用非静态方法        同一个类中,通过对象来调用。 ......
  • 基于Java的考试信息报名系统 SpringBoot考试报名管理系统 Vue前后端分离【Java毕业设
    ⛄博主介绍:⚡全栈开发工程师,精通Web前后端技术、数据库、架构设计。专注于Java技术领域和小程序领域的开发,毕业设计、课程设计项目中主要包括定制化开发、源代码、代码讲解、文档报告辅导、安装调试等。✅文末获取联系✅目录1项目介绍 2技术选型 3系统总体设计 4......
  • 对象数组(JAVA)
    例:定义包含3个元素的对象数组,数据类型为Person,并用for遍历输出Person类publicclassPerson{publicintage;publicStringname;publicPerson(intage,Stringname){this.age=age;this.name=name;}}Test类publicclassTe......
  • 冒泡排序(JAVA)
    冒泡排序的过程排序次数是外层循环(5-1)交换次数是内层循环(5-i-1)importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){intarr[]=newint[5];inttemp;System.out.println("请输入5名学生的成绩......
  • D - Square Pair
    原题链接题解多想几种暴力1.遍历所有数对:\(O(n^2)\)2.求有多少数对其乘积为平方数\(\to\)求有多少平方数能被数对乘积:\(O(n^2)\)3.如果两个数的乘积为平方数,代表他们的质因数,要么都是奇数,要么都是偶数:\(O(?)\)4.如果\(a\timesb\)是完全平方数,代表\(a\timesb\)......