首页 > 编程语言 >扎实打牢数据结构算法根基,从此不怕算法面试系列之004 week01 02-04 使用泛型实现线性查找法

扎实打牢数据结构算法根基,从此不怕算法面试系列之004 week01 02-04 使用泛型实现线性查找法

时间:2023-04-16 21:48:14浏览次数:55  
标签:02 10 search week01 int 数据类型 算法 泛型 data

1、算法描述

在数组中逐个查找元素,即遍历。

2、上一篇文的实现结果

扎实打牢数据结构算法根基,从此不怕算法面试系列之003 week01 02-03 代码实现线性查找法中,我们实现了如下代码:

package com.mosesmin.datastructure.week01.chap02;
/**
 * @Misson&Goal 代码以交朋友、传福音
 * @ClassName LinearSearch03
 * @Description TODO
 * @Author MosesMin
 * @Date 2023/4/13
 * @Version 1.0
 */
public class LinearSearch03 {

    private LinearSearch03(){}
    public static int search(int [] data,int target){
        for (int i = 0; i < data.length; i++)
            if (data[i] == target)
                return i;
        return -1;
    }

    public static void main(String[] args) {
        int [] data = {1,18,22,10,35};
        int res = LinearSearch03.search(data,10);
        System.out.println(res);

        int res2 = LinearSearch03.search(data,666);
        System.out.println(res2);
    }
}

3、上一篇的实现结果代码实现

之前实现的局限:
只支持int型。


需求:
支持所有的Java基本数据类型以及自定义的类类型。


很简单,很多语言都有这个处理多种数据类型的机制,这种机制叫做——泛型。

Java泛型讲解
泛型—— 不可以是基本数据类型,只能是类对象
Java中的8种基本数据类型
boolean、byte、char、short、int、long、float、double

完整的支持泛型的代码实现:

package com.mosesmin.datastructure.week01.chap02;

/**
 * @Misson&Goal 代码以交朋友、传福音
 * @ClassName LinearSearch03
 * @Description TODO
 * @Author MosesMin
 * @Date 2023/4/13
 * @Version 1.0
 */
public class LinearSearch04 {

    private LinearSearch04(){}
    public static <E> int search(E [] data,E target){// 将search方法定义为泛型方法
        for (int i = 0; i < data.length; i++)
            if (data[i].equals(target))// 这里判断相等不能使用==了,==判断的是引用相等,这里需要使用判断值相等,所以用equals方法
                return i;
        return -1;
    }

    public static void main(String[] args) {
        Integer [] data = {1,18,22,10,35};//3、所以这里的解决方法是,将int修改为Integer
        //int res = LinearSearch04.search(data,10);// 1、这里报错了,因为Java中泛型只能接受类对象,不能接受基本数据类型
        //此时,这里的参数10已经被JVM从int类型的10自动转换为Integer类型的10了,所以不再报错
        int res = LinearSearch04.<Integer>search(data,10); //Java7以前需要加上<Integer>这样的泛型限定,Java8以后可以省略
        System.out.println(res);
        //int res2 = LinearSearch04.search(data,666);// 2、这里报错了,因为Java中泛型只能接受类对象,不能接受基本数据类型
        int res2 = LinearSearch04.search(data,666);//此时,这里的参数10已经被JVM从int类型的666自动转换为Integer类型的666了,所以不再报错
        System.out.println(res2);
    }
}

每个基本数据类型都有对应的包装类
Boolean、Byte、Character、Short、Integer、Long、Float、Double

4、运行结果

输入:泛型的数组data、泛型的待查找元素target

运行结果:
mark

输出:
查找的元素在数组中的索引。
查找的第1个目标元素10,它在数组中的索引为3;
查找的第2个目标元素666,它不存在于数组中,所以返回-1。

标签:02,10,search,week01,int,数据类型,算法,泛型,data
From: https://www.cnblogs.com/xlfcjx/p/17324153.html

相关文章

  • 2023.4.16编程一小时打卡
    一、问题描述:线性代数里面我们学习过n维向量,请用类vector_N来封装n维整型向量,成员如下;私有数据成员: 向量维数n,int型指针p,int型公有函数成员:无参默认构造函数,在该函数中,将n置0,将p置null;重载输入输出运算符,输入运算符,先指定向量维数,若输入为非正整数,则提示错误信息,“Error......
  • 实验一 密码引擎-4-国䀄算法交叉测试
    任务详情02人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名1在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图2在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)3在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash......
  • 2021/4/11每日总结
    AjaxAJAX是AsynchronousJavaScriptAndXML的简称。直译为,异步的JS和XML。AJAX的实际意义是,不发生页面跳转、异步载入内容并改写页面内容的技术。AJAX也可以简单的理解为通过JS向服务器发送请求。异步处理同步处理AJAX出现之前,我们访问互联网时一般都是同步请求,也就是当我们通......
  • 2023/4/13
    JSON简介AJAX一开始使用的时XML的数据格式,XML的数据格式非常简单清晰,容易编写,但是由于XML中包含了过多的标签,以及十分复杂的结构,解析起来也相对复杂,所以目前来讲,AJAX中已经几乎不使用XML来发送数据了。取而代之的是一项新的技术JSON。JSON是JavaScriptObjectNotation的缩写,是J......
  • 2023/4/14每日总结
    在JS中操作JSON1.创建JSON对象varjson={“name1”:”value1”,”name2”:”value2”,“name3”:[1,”str”,true]};varjson=[{“name1”:”value1”},{“name2”:”value2”}];2.JSON对象转换为JSON字符串JSON.stringify(JSON对象)3.JSON字符串转换为JSON对象JSON.parse(......
  • 界面重建——Marching cubes算法
    一、引子对于一个标量场数据,我们可以描绘轮廓(Contouring),包括2D和3D。2D的情况称为轮廓线(contourlines),3D的情况称为表面(surface)。他们都是等值线或等值面。以下是一个2D例子: 为了生成轮廓,必须使用某种形式的插值。这是因为我们只在数据集中的一个有限点集上有标量值,而我们......
  • 2023.4.16每日会议
    昨天做了什么:完成了饼状图和比例listview遇到了哪些问题:对饼状图的使用不知道今天准备做什么:尝试将数据库迁移到官方服务器 ......
  • day02-Redis命令
    Redis命令1.Redis数据结构介绍Redis是一个key-value的数据库,key一般是String类型,value的类型多种多样,value常见的八种类型:Redis支持五种基本的数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset,有序集合)。各个数据类型应用场景:类型简介特性场景S......
  • Floyd算法注意事项
    注意事项:k层循环不能内置Floyd适用于求解全源最短路径问题,即对于给定的图G,求解任意两点之间的最短路径长度。模板#include<bits/stdc++.h>usingnamespacestd;constintN=105;intdis[N][N];voidFloyd(){ memset(dis,0x3f3f3f,sizeof(dis));//初始化为极大值 //......
  • 贪心_20230416
    134.加油站题目说明在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,......