最简单的算法:线性查找法

查找 —— 静态查找法(顺序查找法、折半查找法、分块查找法) 一、顺序查找法 算法思想: 依次与每个关键字逐个比较,如果与给定值相等,则查找成功,返回成功值;如果与所有关键字都不相等,则查找失败,返回失败值。其平均查找长度是(n+1)/2 实现: int Search(int R[],int n,int k) // 在长度为n的R[]中查找数值为k的元素 { int i; for(i=0;i<n;i++) { if(a[i]==k) r... 阅读详情

目录

写在前面

一、什么是算法

二、线性查找法

2.1、实现线性查找法

2.2、思维拓展——使用泛型

2.3、自定义类测试泛型方法

2.4、循环不变量

三、复杂度分析

3.1、复杂度分析简介

3.2、常见的算法复杂度

四、算法性能测试


写在前面

最近比较忙,并且近期还要完成人生的一件大事,所以文章最近写的比较少,今天抽空整一篇,贵在坚持吧!

当你在这个行业摸爬滚打几年之后,或许你会像我一样感到迷茫,想进入大厂工作,当你真正去大厂面试的时候,你会发现所有大厂的面试都无可避免的会问到数据结构与算法相关的知识,这是为什么呢?这些东西真的有那么重要吗?为什么我平时也没用到不照样写项目吗?灵魂三连击啊,没办法,现实就是这么残酷。当然了原因其实也很简单,因为现在的计算机科学处于一个高速发展的时代,对于公司业务层面的日常开发都是依赖于各种开发框架、数据库软件、工具库等等,你觉得没用到,那是因为别人已经帮你搞好了,晓得了吧,而大厂面试并不是说看你能不能做业务,能做业务的人多了,凭什么选你呢,你是比别人长得好看吗?他们更多的是注重个人基础能力和未来的发展潜力以及对新知识的学习能力,所以没啥好抱怨的。
如果你大学是读计算机专业的,那么你肯定知道数据结构和算法是必学的课程,我不知道还是否有人记得,大学计算机基础里面对于程序的定义是什么?还有人记得吗?没错,程序 = 数据结构 + 算法,不信的话你可以回去翻翻看。
上面废话了这么多,就是想表明数据结构和算法的重要性(虽然我也不会,但是咱得有这个意识),所以我新开了一个专栏用来记录我的数据结构和算法的学习之路,下面这张图里面罗列了一些很重要的数据结构和算法,当然还有一块没有列出,有人能想到是什么吗?图论,它也是很重要的一块知识点,后面等学到了再单独介绍,大家可以看看这张图感受一下:

今天我们就从最简单的来看——线性查找,这个我相信99%的人应该都写过,所以难度等级---简单。

一、什么是算法

英文对应的单词是Algorithm,它的本意为:解决问题的方法,所以算法的直接理解就是解决问题的方法。在计算机领域定义的话就是:一系列解决问题的、清晰、可执行的计算机指令。

在我们的日常生活中,到处都是算法,它就在你身边,你却没发现,其实也不是没发现,只是你没给它定义为算法这个概念而已,举几个常见的栗子,比如:问路(如何去新街口)、菜谱(糖醋里脊这道菜怎么做),这些问题的解决方案都可以当做是一个小的算法。下面来简单了解一下算法的几个特性(了解即可):

算法的五大特性

  • 有限性:在有限的时间内可以执行完成(有限的时间并不一定是非常短的时间)
  • 确定性:不会产生二义性,描述该算法的每个指令的含义都是清晰的
  • 可行性:算法中的每一步指令都是可行的
  • 输入(输入输出在理解层面上是一种更加广义的概念)
  • 输出

今天由于是第一篇,咱们来看一个最简单的算法:线性查找法。

二、线性查找法

2.1、实现线性查找法

线性查找法在生活中其实是很常见的,举个栗子吧:比如,你的书架上第一层有许多书,现在你想要从里面找到《编译原理》这本书,你会怎么找呢?通常你会从第一本开始看书名,如果是的就找到了直接拿出来,如果不是就继续下一本,以此类推,其实这样一个过程就是线性查找的过程。

下面我们就通过一个实际的案例,然后来看看实现这样一个线性查找,代码究竟该怎么写?

针对上面这个案例,相信大家立马就能想到该如何实现了?没错,就是一个简单的for循环,没啥好讲的,直接上代码了:

public class LinearSearch {

    //私有构造,防止外部实例化该对象
    private LinearSearch(){}

    //线性查找元素
    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 = {2, 9, 5, 1, 8, 7, 3, 6};
        int index = LinearSearch.search(data, 8);
        System.out.println(index);
    }

}

执行结果也是显而易见的:

2.2、思维拓展——使用泛型

上面的程序我们实现了一个最基础最简单的整型数组的线性查找算法,现在我们来进一步的思考,将这个业务场景进一步的发散,在实际的应用中,你可能遇到的数据类型不是整型的,比如字符型、浮点型甚至是自定义的Object类型,如果是这样的话很显然,上面的程序就无法满足了,可能你就会根据对应的业务场景把上面的代码再Copy一份,然后对应的修改为你需要的类型,这样写没什么问题哈,需求当然也是能实现的,但是这个实现的方式有点......,不说了自己体会吧,我就是那么干的🤣。

实际上我们不必如此,你想啊,如果能使用一个万能的类型不就搞定了吗,你在调用的时候业务方是什么类型你就传什么类型,程序的可扩展性是不是极大的提高了,而且你也不用再复制出来那么多重复操作的代码了,所以思维方式决定了代码行数啊!

好,下面来说解决方案,基本上在每种程序语言中都有一个专门的语言特性是用来处理这种问题的,它可以让你的类或者是方法能够处理不同的类型,这种机制就是——泛型,关于泛型的基本用法这里不做介绍,因为咱不是来说语言的哈,所以下面就来把上面的代码通过泛型进行改造。

首先我们不会直接将LinearSearch这个类定义为泛型类,因为那样没有意义,我们直接操作的是该类中定义的search()方法,所以应该将这个方法改造为泛型方法。

这里简单的对Java中的基本数据类型做一个补充:

  • Java语言中使用泛型,不可以是基本数据类型,只能是类对象
  • Java中八种基本数据类型:boolean,byte,char,short,int,long,float,double
  • 每个基本数据类型都有对应的包装类
  • 对应的包装类:Boolean,Byte,Character,Short,Integer,Long,Float,Double

下面来看改造为泛型方法后的代码是什么样的呢?如下所示,很简单哈:

public class LinearSearch {

    //私有构造,防止外部实例化该对象
    private LinearSearch(){}

    //线性查找元素,泛型只能接受类对象,不能接受基本数据类型
    public static <T> int search(T[] data, T target) {
        for (int i = 0; i < data.length; i++) {
            //"=="判断的是引用相等,我们需要判断的是值相等,所以这里用equals()方法
            if (data[i].equals(target)) {
                return i;
            }
        }
        return -1;
    }

    //测试方法
    public static void main(String[] args) {
        //转换成对应的包装类
        Integer[] data = {2, 9, 5, 1, 8, 7, 3, 6};
        //target仍然可以传递数字,因为Java中有自动转换机制,编译器自动转换为对应的包装类
        int index = LinearSearch.search(data, 8);
        System.out.println(index);
    }

}

这段代码执行的结果和上面是一样的,仍然是4。

2.3、自定义类测试泛型方法

上面改造完成之后,咱们测试仍然用的是基本数据类型,如果你想要使用自定义的类来测试上面的方法好不好用,有一点需要注意,你必须自己去重写equals()方法的逻辑,基本数据类型中是Java语言已经帮我们实现好了,所以自定义类需要你自己实现,这个任务在逻辑结构上不属于search()方法需要完成的任务,它是自定义类的设计者要去完成的,所以咱们的search()方法不需要做任何改动,下面来举个栗子实际操作一下。

比如,这里自定义一个类:Beauty,给她一个成员变量name,然后我们先不重写equals()方法,如下:

public class Beauty {

    private String name;

    public Beauty(String name){
        this.name = name;
    }

}

然后在main()方法中使用该类进行测试:

public static void main(String[] args) {
    Beauty[] beauties = {new Beauty("杨幂"),new Beauty("赵丽颖"),new Beauty("唐嫣")};
    Beauty beauty = new Beauty("赵丽颖");
    int result = LinearSearch.search(beauties,beauty);
    System.out.println(result);
}

执行结果为-1,虽然name一样,但是却查不到,因为没有重写equals(),它就没有name一样就是同一个对象的逻辑,就会执行默认的比较逻辑,equals()默认比较的是两个类对象的地址:

现在我们来实现自己的比较逻辑,重写equals()方法,让它实现name相同即为同一个对象的功能:

public class Beauty {

    private String name;

    public Beauty(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(@Nullable Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (this.getClass() != obj.getClass())
            return false;
        Beauty beauty = (Beauty) obj;
        return this.name.toLowerCase().equals(beauty.name.toLowerCase());
    }
}

此时,同样的main()方法,你再运行就可以查到对应的下标啦:

2.4、循环不变量

首先来看下面这张图,图中我做了一些简单的标注,相信都能看懂是什么意思:

循环不变量的概念就是:在每一轮循环开始时,算法都满足data[0...i-1]中没有找到目标这个条件,这就叫循环不变量,循环体即if语句它所做的事情就是在维持着循环不变量。简单来说,循环不变量就是在算法每一轮开始都保持着一个什么样的特性,而循环体则是在维持这个特性。由于咱们这个算法比较简单,所以你可能看不出循环不变量有什么用,当你在设计一些相对复杂的算法的时候,你可能就能够看到循环不变量的意义所在了,这里的话对这个概念有个基本的了解即可。

三、复杂度分析

3.1、复杂度分析简介

首先来看下图,这是上面咱们写的那个算法,对于一个算法性能的评估,通常我们要去考虑最差的情况:

时间复杂度是算法运行时间与数据规模n之间的关系,当一个算法满足:T=k*n+m这个表达式,则认为它的时间复杂度是O(n),从这个表达式也能看出,常数不重要,复杂度描述的是随着数据规模n的增大,算法性能的变化趋势,举个例子,如下图中所示,两种复杂度分析:


当n足够大的时候,很明显T1要优于T2。

3.2、常见的算法复杂度

  • 线性查找法:O(n)
  • 一个数组中的元素可以组成哪些数据对:O(n²)
  • 遍历一个n*n的二维数组:O(n²)
  • 数字n的二进制位数:O(logn) 对应的进制为底数
  • 数字n的所有约数:O(n)或者O(√n)
  • 长度为n的二进制数字:
  • 长度为n的数组的所有排列:O(n!)
  • 判断数字n是否是偶数:O(1)

上面说的这些其实都是从时间的角度来说的,所以都是时间复杂度。实际上空间也是有复杂度的,原理跟上面相同,就是看它开辟额外的空间的大小和数据规模n之间的关系,表示符号和上面一样,比如我们的线性查找法它的空间复杂度就是O(1)。

四、算法性能测试

在这一部分咱们来对我们上面写的算法做一个性能测试,通过构造较大的数据量来测试算法执行的性能。

首先,我们来写一个构造数据的类ArrayCreator:

public class ArrayCreator {

    private ArrayCreator(){}

    public static Integer[] creatorArray(int n){
        Integer[] arr = new Integer[n];
        for (int i=0;i<n;i++){
            arr[i] = i;
        }
        return arr;
    }

}

接着在main()方法中分别构造100万条数据和1000万条数据并且分别执行100次,在自己的计算机上面跑一下来看程序执行时间:

public static void main(String[] args) {
        int[] dataSize = {1000000, 10000000};
        for (int n : dataSize) {
            Integer[] data = ArrayCreator.creatorArray(n);
            long startTime = System.nanoTime();
            for (int k = 0; k < 100; k++)
                LinearSearch.search(data, n);
            long endTime = System.nanoTime();
            double time = (endTime - startTime) / 1000000000.0;
            System.out.println("n=" + n + ",运行100次耗时:" + time + "秒");
        }
    }

本地计算机执行结果:


从上面的执行结果我们可以看到,1000万条数据的执行时间大致是100万条数据的10倍,这根咱们的数据量级也是基本成正比的,当然了,这个跟你的计算机性能也是有关的,我这台计算机的配置也还算可以了,不同的计算机执行的结果可能会稍有不同,大家可以自行进行测试。

写到这里,咱们今天的算法开篇就算是说完了,介绍了一个最简单的算法,其实都不能说它是个算法,然后介绍了一下复杂度的简单定义,如果你需要相对完整清晰的理论可以去自行查找一下相关的资料,入门级的书籍有一本国外的《算法导论》可以看一下。

好了,今天就到这里吧,最近有点忙更的少了,抱歉!

祝:工作顺利!

查找算法之线性搜索算法实现 介绍数据搜索算法中最简单的线性搜索算法的思路与C/C++/java的实现方法 阅读详情

相关推荐

大话西游2单机版V8一键架设教程:5分钟搞定GM权限和仙玉修改(附完整物品代码表)

本文详细讲解了大话西游2单机版V8的一键架设教程,包括5分钟快速配置GM权限、仙玉修改及物品代码使用技巧。通过分步指导和服务端配置详解,帮助玩家轻松掌握游戏管理功能,重温经典回合制体验。附完整物品代码表,助你快速获取稀有道具和神兽。

weixin_42557830的博客 1230

数据结构学习笔记——查找算法中的线性、散列查找(顺序、折半、分块、散列)

查找可大致分为线性查找、树形查找和散列查找三种,这里只介绍线性查找中的顺序查找、折半和分块查找,散列查找中的散列表(哈希表)。

小宇y的博客 5553

高精度SAR ADC设计实战:从建模到版图的16位1MSPS实现

本文详细介绍了16位1MSPS高精度SAR ADC的设计过程,从建模到版图实现的完整流程。重点探讨了分段电容阵列设计、校准算法实现及版图匹配等关键技术,展示了如何在180nm工艺下实现92.5dB SNDR和109.6dB SFDR的高性能指标。文章特别强调了整数桥接电容设计对提升匹配精度的关键作用,为高精度模数转换器设计提供了实用参考。

weixin_33724046的博客 436

【数据结构查找算法篇】----线性查找【实战项目】

在数据结构中,有许多查找算法,它们根据数据的存储结构方式和结构的特点而有所区别,关于数据结构查找算法的学习,博主会依次详细的介绍现在比较常见的查找算法,通过对算法的介绍,搭配Java的实战项目,更深层次的对算法进行讲解。今天,我们就来介绍一下比较简单的查找算法----线性查找。线性查找,也叫顺序查找(Sequential Search),是一种最基本的查找算法。它适用于元素随机排列的数组(或者其他线性数据结构,如链表)。这种查找算法不要求数据被排序。线性查找的工作原理是。

m0_71685576的博客 1775

深入解析设计规则检查约束:set_max_transition与set_max_capacitance的实战应用

本文深入解析了芯片设计中的关键设计规则检查约束set_max_transition与set_max_capacitance。通过剖析信号转换时间与负载电容的原理,结合实战案例,阐述了如何设置约束以保障信号完整性、控制功耗与时序,并提供了在综合与布局布线阶段的应用策略与修复方法。

weixin_29233857的博客 173

海思ISP实战:YUV Sharpen参数调试全解析

本文深入解析了在海思ISP平台上进行YUV Sharpen参数调试的实战经验。文章以海思3516EV300芯片为例,详细拆解了EdgeFiltStr、TextureFreq等核心参数的作用与协同策略,并重点阐述了如何通过ISO联动调试,在图像清晰度与噪声抑制之间取得最佳平衡,为图像调试工程师提供了宝贵的避坑指南和实战参考。

grape的博客 209

【算法系列 | 10】深入解析查找算法之—线性查找

线性查找是一种简单而直观的搜索算法,一种基本的搜索算法,用于在一个集合中查找特定元素的位置或确定特定元素是否存在。适用于特定的小型数据集或无序数据集,但对于大型数据集,需要更高效的算法来提高性能。了解线性查找的原理和适用性有助于选择适当的搜索方法。

颜淡慕潇 2万+

【Out-of-Distribution Detection】Evidential Deep Learning in NeurIPS 2018 个人理解

核心思想是将分类器的概率输出视为一个狄利克雷分布(Dirichlet Distribution)并替换,之后引入两个损失分别负责保证预测结果准确性和提升被错误分类的样本的不确定性。

研究兴趣:开放集识别、开放世界识别、新类发现、增量学习、少样本学习 2436

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

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

weixin_47225948的博客 860

SolidWorks速成教程P3-6【零件 | 第六节】——草图封闭轮廓&所选轮廓&厚度为零的报错

到这里,我们已经将特征成型的常用功能学完。这节我来继续讲解一下 SolidWorks中建模的一些容易忽略的问题(草图封闭轮廓&所选轮廓&厚度为零的报错)。

嵌入式阿齐Archie 5780

手把手教你学simulink(40.1)--水力发电场景示例:基于 Simulink 的抽水蓄能电站水力发电

项目背景抽水蓄能电站是一种重要的储能技术,广泛应用于电力系统的调峰填谷、频率调节和备用电源。它通过在电力负荷低谷时将水从下水库抽到上水库储存,在电力负荷高峰时释放水进行发电,从而实现电能的高效利用。与传统的水电站不同,抽水蓄能电站可以在短时间内快速响应电网的需求,具有良好的灵活性和可靠性。本项目旨在使用 MATLAB/Simulink 模拟一个完整的抽水蓄能电站的水力发电过程,包括水泵-涡轮机系统、发电机、水道系统、控制系统等,并实现对电站的精确控制,确保其在不同工况下都能稳定运行。

MHD0815的博客 885

线性查找与哨兵查找法

当遍历数组时如何进行判断和遍历过程中的一些细节,哨兵法查找的提出,以及其独特的优势和需要注意的事项,这些内容在本文中都有细致的讲解

2302_81805546的博客 2143

在Windows10上安装WSL2

WSL2是微软提供的Windows子系统,允许在Windows 10和11上运行Linux环境,提供更好的性能和兼容性。安装WSL2需要启用WSL功能、更新系统、安装WSL2内核,并设置为默认版本。之后,可以通过Microsoft Store安装Linux发行版,并使用WSL命令启动和管理它们。

howard2005的专栏 5940

<<从零入门数据结构>>最简单的查找算法-线性查找法 第一讲

最基础的线性查找算法、涉及循环不变量、泛型、自定义类和时间复杂度等内容,作为入门的好博文

弗兰-随风小欢的博客 796

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【算法与数据结构】1 算法0基础入门,详解什么是算法?什么是线性查找法?

线性查找1.什么是算法?1.1算法的五大特性① 有限性:② 确定性③可行性④输入④输出2.线性查找法2.1生活中的线性查找法2.2 计算机中的线性查找法3.线性查找法的实现3.1初步实现3.2 代码优化3.2.1优化13.2.2 优化2

爱书不爱输的程序猿 1148

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

线性探测法的查找函数_线性查找法

开篇:对于数据结构及算法的学习在17年时就已经在博客中开了专栏:但是!!!感觉学得有点零散,有c版本的,也有java版本的,没成体系,当然其效果也并没达到自己满意的效果,基于此,这里准备重新开个专栏:准备从0开始构建一个Java版本对于算法与数据结构的学习体系,重点是要“系统”,正好也对于之前所学的算法进行一个重新梳理,并且再将自己的算法功底拔高一下,说实话算法的学习是比较枯燥的,但是它...

weixin_34247778的博客 1278

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【查找】基于线性表的查找法

查找的主要方法 基于线性表的查找法 一、顺序查找法 顺序查找法的特点是,用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。存储结构通常为顺序结构,也可为链式结构。 顺序结构数据类型的定义: #define LIST_SIZE 20 typedef struct { KeyType key; OtherType other_data; } RecordType; typedef struct { RecordType r[LIST_SIZE+1]; /* r[0]为工作单元 */ int.

weixin_45765128的博客 763

[算法与数据结构] 谈谈线性查找法~

[算法与数据结构] 一文详解线性查找法~前言一、算法基础知识1、什么是算法2、算法的五大特性二、线性查找法1、举例阐述2、实现线性查找法3、使用泛型4、升级改造5、使用自定义类6、循环不变量三、算法复杂度1、简单的复杂度分析2、常见算法复杂度(1)遍历一个 **n * n** 的二维数组(2)遍历一个 a*a 的二维数组(3)数字n的二进制位数3、复杂度总结4、空间复杂度四、测试算法性能五、 结束语彩蛋 One More Thing 前言 众

moandaylab 1492

线性查找法&二分查找法

数组的查找:在数组中寻找特定元素的过程。1、线性查找法 算法思路:线性查找法是将要查找的关键字key与数组中的元素逐个进行比较, 直到列表中找到与关键字匹配的元素,或者查完列表也没有找到。如果匹配成功,返回与关键字匹配的元素在数组中的下标,如果没有找到则返回-1。 适用于小数组或没有排序的数组中查找,执行时间随着数组元素个数的增长而线性增长,因此对大数组效率不高。代码实现: public c

zd454909951的博客 858

线性查找法

线性查找法线性查找法什么是算法算法的五大特性使用泛型代码:使用自定义类测试我们的算法循环不变量简单的复杂度分析 线性查找法 一个非常简单的算法 适应更多的数据类型 如何编写正确的程序 性能测试 复杂度分析 什么是算法 Algorithm:一系列解决问题的、清晰的、可执行的计算机指令 算法的五大特性 有限性 确定性:不会产生二义性 可行性 输入 输出 使用泛型 代码: 简单写一下: public class LinearSearch { private LinearSearch()

Aurorat的博客 825

算法与数据结构(第一周)——线性查找法

线性查找法是一个非常简单的算法,比如说现在有一打试卷在,每个试卷都有自己的一个编号,在这一沓试卷当中找到属于自己的那一张试卷。一个一个去寻找自己的目标元素,就是线性查找法,例如: 对于以上算法返回的是一个int,也就是所查找的目标元素所对应的索引值,此时这个算法需要两个参数,第一个是数组,第二个是目标元素 。 仔细看LinearSearch是一个动词,创建一个动词的类对象看样子有点奇怪,所以将search函数设置为静态,相应的在调用search这个方法的时候。就不需要再次实

路过Coder 716

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

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

HuoZhiyan 的博客 850

Java算法之折半查找法

Java 算法之折半查找法 算法介绍 折半查找法要求线性表是有序的,即表中记录按关键字有序(假设是递增有序的)。 折半查找的基本思路:设 R[low, ···, high] 是当前的查找区间,首先确定该区间的中间位置 mid = (low + high) / 2,然后将待查的 k 值与 R[mid] 比较,若相等,则查找成功,并返回该位置,否则需确定新的查找区间。若 R[mid] > k,则...

java阳旭的博客 2564

算法之线性查找法

查找数组中的指定元素 实现: /** * 线性查找法 */ public static<T> int line(T[] lines,T value){ for(int i=0;i<lines.length;i++) if(lines[i].equals(value)) return i; return -1; } 实体类测试: public class St

qq_43251032的博客 200
上一篇: 再见篇:App专项技术优化
下一篇: 安卓组件化架构设计
江湖客陆仁甲
博客等级 码龄10年 179粉丝 98原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值