算法与数据结构-线性查找法

算法与数据结构-线性查找法


前言

算法与数据结构的第二篇文章


一、线性查找法

百度解释:线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;若比较结果与文件中n个记录的关键字都不等,则查找失败。

示例:要在一堆作业本中找到自己的作业本;第一张不是、第二张不是、……第十张是,找到。

二、代码解析

1.基本数组查找

在data数组{16,24,35,22,15,95,85,33,55,44}中查找15。
算法很简单:
输入:数组、目标元素
输出:目标所在的索引;若不存在,则返回-1。

代码如下(示例):

public class LinerSearch {
    // 线性查找算法代码
    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 = {16,24,35,22,15,95,85,33,55,44};
        int result1 = LinerSearch.search(data, 15);
        System.out.println(result1);
        int result2 = LinerSearch.search(data, 20);
        System.out.println(result2);
    }
}

结果:
在这里插入图片描述
很显然,上述代码实现了我们要在数组中查找到目标元素,但是实际问题中往往不会只是在int数组中查到,我们可能会遇到在double、long、自定义类等对象数组中查找目标元素,我们此时构建的代码是无法满足的,为了让我们构建的代码更加通用,这时就需要用到泛型。

2.使用泛型优化代码

在java语言中,泛型只能存放类对象,而不能存放基本数据类型

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

优化代码如下(示例):

public class LinerSearch_E {
    public static <E> int search(E[] data, E target) {
        for (int i = 0; i < data.length; i++) {
            if (data[i].equals(target)) {
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        Integer[] data = {16,24,35,22,15,95,85,33,55,44}; 
        int result = LinerSearch_E.search(data, 15);
        //java8之前 int result = LinerSearch_E.<Integer>search(data, 15);
        System.out.println(result);
    }
}

注意:
在这里插入图片描述结果:
在这里插入图片描述
备注:如果是在自定义类数组中查找目标对象,一定要在自定义类中重写equals方法,如果你不重写equals 方法,那么就是使用从Object中继承的equals方法,Object基类的中的equals 和 == 是一样的,都是比较地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值