扎实打牢数据结构算法根基,从此不怕算法面试系列之004 week01 02-04 使用泛型实现线性查找法
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
运行结果:

输出:
查找的元素在数组中的索引。
查找的第1个目标元素10,它在数组中的索引为3;
查找的第2个目标元素666,它不存在于数组中,所以返回-1。
扎实打牢数据结构算法根基,从此不怕算法面试系列之004 week01 02-04 使用泛型实现线性查找法的更多相关文章
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){ if ( ...
- 数据结构与算法--最短路径之Bellman算法、SPFA算法
数据结构与算法--最短路径之Bellman算法.SPFA算法 除了Floyd算法,另外一个使用广泛且可以处理负权边的是Bellman-Ford算法. Bellman-Ford算法 假设某个图有V个顶点 ...
- 数据结构与算法--最短路径之Floyd算法
数据结构与算法--最短路径之Floyd算法 我们知道Dijkstra算法只能解决单源最短路径问题,且要求边上的权重都是非负的.有没有办法解决任意起点到任意顶点的最短路径问题呢?如果用Dijkstra算 ...
- 数据结构与算法--最短路径之Dijkstra算法
数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们 ...
- 数据结构与算法--最小生成树之Kruskal算法
数据结构与算法--最小生成树之Kruskal算法 上一节介绍了Prim算法,接着来看Kruskal算法. 我们知道Prim算法是从某个顶点开始,从现有树周围的所有邻边中选出权值最小的那条加入到MST中 ...
- 数据结构与算法--最小生成树之Prim算法
数据结构与算法--最小生成树之Prim算法 加权图是一种为每条边关联一个权值或称为成本的图模型.所谓生成树,是某图的一棵含有全部n个顶点的无环连通子图,它有n - 1条边.最小生成树(MST)是加权图 ...
- hdu 3336:Count the string(数据结构,串,KMP算法)
Count the string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 每周一道数据结构(四)A*算法&博弈树α-β剪枝
A*算法/博弈树 前阵子考试学了A*算法.博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记.在这里感谢面试我的那位工程师~~ A* ...
随机推荐
- The Little Book of Rust Books
https://lborb.github.io/book/title-page.html https://blog.logrocket.com/unsafe-rust-how-and-when-not ...
- 剑指Offer2---------替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 重点: ...
- 华为ME60 配置PPPOE-radius 业务
华为ME60 配置PPPOE-radius 业务 1.创建radius 认证 # radius-server source interface LoopBack0 radius-server grou ...
- python中的字符串/列表查找函数小总结
find()和index() 首先是适用情况, 'list' object has no attribute 'find' , list没有find方法, str全有. 返回的情况: 查找成功都会返回 ...
- python 猜数字
方法一 import randomif __name__ == '__main__': yourname = input("你好! 你的名字是什么?\n"); prin ...
- [Unity移动端]gradle打包
建议先看一下这篇文章: https://linxinfa.blog.csdn.net/article/details/118553713?spm=1001.2101.3001.6650.10& ...
- useBean类属性[javaChuLi.LoginBean]的值无效
今天遇到了一个错误,如图 参见:JSP 中给定的 useBean 标签的 class 属性的值无效_dkawskawx的博客-CSDN博客
- PHP文件及运行(适合PHP初学者)
PHP文件可包含HTML.JavaScript代码和 PHP代码,换句话说PHP 代码可以嵌入HTML文档.PHP文件名以php为后缀. PHP代码以"<?php"开头,以& ...
- CentOS /RHEL 系统更新安全补丁的方法
在 Linux 系统上,其中一个最重要的需求就是保持定期更新最新的安全补丁,或者为相应的 Linux 版本更新可用的安全补丁.在这篇文章中,我们将分享如何在 CentOS/RHEL 7/6 版本中设置 ...
- Android笔记--查询联系人
查询联系人 先在raw_contacts表里面查到每个联系人的不同的id,然后再根据各个id去查询各个联系人的详细信息 然后利用id得到相应的uri的值: 之后,就直接根据uri查询各个联系人的详细信 ...