栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一:线性查找法:5:线性查找法案例代码和完善(完善包括【方法设为静态,构造方法设为私有】,【使用泛型增强方法通用性】,【使用equals代替==】;博客也包括equals()和==的分析)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一:线性查找法:5:线性查找法案例代码和完善(完善包括【方法设为静态,构造方法设为私有】,【使用泛型增强方法通用性】,【使用equals代替==】;博客也包括equals()和==的分析)

说明:

(1)本篇博客的主要目的是【通过线性查找法,打开算法的大门】;

(2)其中的【程序实现 和 后续的程序改善】,似乎有点跑题,但可以有效的【提升编程能力】;

目录

一:“线性查找法”引入案例; 

二:“线性查找法”初始实现;

三:“线性查找法”初始实现:完善一:【查找方法设为static】;【构造方法设为private】;

1.将search方法设为静态; 

2.将LinearSearch类的构造函数设置为private;

四:“线性查找法”初始实现:完善二:使用泛型,使方法具有通用性;

五:“线性查找法”初始实现:完善三:使用equals()代替==;


一:“线性查找法”引入案例; 

比如在一个线性数据结构(数组)[24,18,12,9,16,66,32,4]中,想从这个数据中查找16这个元素;那么,可以设置一个索引i,从0开始挨个比对;


二:“线性查找法”初始实现;

创建一个Java工程:LinearSearch;然后为了演示,创建LinearSearch演示类;

LinearSearch类:

public class LinearSearch {
    public 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 = {24, 18, 12, 9, 16, 66, 32, 4};
        LinearSearch linearSearch = new LinearSearch();
        int res = linearSearch.search(data, 16);
        System.out.println(res);
    }
}

说明:

(1)这个代码太简单了,很容易看懂,就不解释了;

(2)只是,上面的代码还有很多不完美的地方,需要修改完善;


三:“线性查找法”初始实现:完善一:【查找方法设为static】;【构造方法设为private】;

这儿的主要目的是:把LinearSearch类,变得更像一个【工具类】;

1.将search方法设为静态; 

LinearSearch;

public class 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 = {24, 18, 12, 9, 16, 66, 32, 4};
//        LinearSearch linearSearch = new LinearSearch();
//        int res = linearSearch.search(data, 16);
        int res = LinearSearch.search(data, 16);
        System.out.println(res);
    }
}

说明:

(0)我们知道Java官方提供的Math类,使用Math类的方法时候,都可以直接如Math.abs(-4)所示,用Math类调用;

(1)将search()这个功能方法,设置为静态的;那么我们在调用search()方法的时候,直接调用就行了,不用再实例化LinearSearch类对象了;

目前这个LinearSearch类,可以完成特定的功能,那么可以认为是自己编写的工具类;而对于工具类,我们一般是不希望实例化这个类的,而是直接通过类名去调用内部的方法;

那么,如何设置,以达到【无法实例化LinearSearch类对象】呐?:可以将类的构造函数设为private;

2.将LinearSearch类的构造函数设置为private;
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 = {24, 18, 12, 9, 16, 66, 32, 4};
//        LinearSearch linearSearch = new LinearSearch();
//        int res = linearSearch.search(data, 16);
        int res = LinearSearch.search(data, 16);
        System.out.println(res);
    }
}

说明:

(1)这儿也是仿照Java官方提供的jar,如Math类的构造函数就设为了private;

(2)很容易理解,一旦构造函数设为私有,那么在LinearSearch类外,实例化LinearSearch类对象,就会报错;


问题:

即,我们要继续改造,使其具有通用性,我们也能避免书写重复的代码;这也就是接下来【四:“线性查找法”初始实现:完善二:使用泛型;】中的内容;


 

四:“线性查找法”初始实现:完善二:使用泛型,使方法具有通用性;

【为了使一个类,或,一个方法,能够应付多种不同的数据类型】,Java提供的泛型机制,可以解决这个问题。(在很多语言中都有类似的机制)

在java中,使用泛型的方式,常见的有两种:

(1)定义一个泛型类:

……………………………………………………

但是,这儿我们使用的不是LinearSearch类的类对象,而是仅仅是使用类中的search()方法;所以,这儿我们不需要把这个LinearSearch类定义为泛型类;

……………………………………………………

(2)定义一个泛型方法:

LinearSearch类:

import java.util.ArrayList;

public class LinearSearch{

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

    public static void main(String[] args) {
        Integer[] data = {24, 18, 12, 9, 16, 66, 32, 4};
//        LinearSearch linearSearch = new LinearSearch();
//        int res = linearSearch.search(data, 16);
        int res = LinearSearch.search(data, 16);
        System.out.println(res);
    }
}

说明: 

(1)使用泛型时,不能使用基本数据类型;

(2)方法说明; 

(3)Java8增加了类型推断:我们在调用泛型方法的时候,可以不明确指明泛型的类型;


五:“线性查找法”初始实现:完善三:使用equals()代替==;

equals()方法和==分析:

(1)==:判断引用是否相等;

(2)所有类的父类Object类的equals()方法,其中的内容也是==:即最顶级的equals()方法也是比较引用是否相同;

 

(3)Java中的不可变类(Immutable Class),如String、基本类型的包装类、BigInteger和BigDecimal等,都重写了(从Object类继承过来的)equals()方法:重写后的equals()方法,其作用是比较值是否相等了;

(4)假如我们自定义了一个类,比如Student类:

          ● 如果我们不在Student类中重写equals()方法的话,那么【student1==student2】和【student1.equals(student2)】是一样的,都是比较student1和student2是否引相等; 

          ● 所以,对于一些自定义的类,我们一般也重写equals()方法;(以达到【student1.equals(student2)】是比较student1和student2是否值相等的目的;;;;自然,可以在equals()方法中定义自己的、符合当前业务需求的逻辑)

LinearSearch类:

import java.util.ArrayList;

public class LinearSearch{

    private LinearSearch() {
    }
    public static  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 = {24, 18, 12, 9, 16, 66, 32, 4};
//        LinearSearch linearSearch = new LinearSearch();
//        int res = linearSearch.search(data, 16);
        int res = LinearSearch.search(data, 16);
        System.out.println(res);
    }
}

说明:

(1)使用equals()方法,而不是==;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号