线性查找法
1.概念
对一堆事物进行顺序查找,直到找出目标返回,或遍历后返回空
2.1 例一 在数组中查找Int类型元素
package com.example.datastruct
//一维数组查找
fun main() {
//定义数组
val data = arrayOf<Int>(24,28,12,9,16,66,32,4)
var arrIndex:Int?
//测试两种结果
//1.数组中包含查找值
arrIndex = searchData(12,data)
exportResult(arrIndex)
//2.数组中未包含查找值
arrIndex = searchData(99,data)
exportResult(arrIndex)
}
//查找数组元素函数
fun searchData(searchNum:Int,data:Array<Int>):Int{
//遍历数组
for(i in data){
if(searchNum == i){
return data.indexOf(i)
}
}
return -1;
}
//输出查询结果
fun exportResult(arrIndex:Int){
val message = if(-1 == arrIndex){
"没有在数组中找到数据"
}
else{
"找到数据,数据在数组中的下标为$arrIndex"
}
println(message)
}
2.2 例二 在数组中查找Integer类型数据<使用泛型>
package com.example.datastruct
//一维数组查找
fun main() {
//定义数组
val data = arrayOf(24,28,12,9,16,66,32,4)
var arrIndex:Int?
//测试两种结果
//1.数组中包含查找值
arrIndex = searchData(12,data)
exportResult(arrIndex)
//2.数组中未包含查找值
arrIndex = searchData(99,data)
exportResult(arrIndex)
}
//查找数组元素函数
fun <T> searchData(searchNum:T,data:Array<T>):Int{
//遍历数组
for(i in data){
if(searchNum == i){
return data.indexOf(i)
}
}
return -1;
}
//输出查询结果
fun exportResult(arrIndex:Int){
val message = if(-1 == arrIndex){
"没有在数组中找到数据"
}
else{
"找到数据,数据在数组中的下标为$arrIndex"
}
println(message)
}
2.3 例三 在数组中查找Student类型数据<使用泛型>并重写equals方法
package com.example.datastruct
/*
测试对象数组
* */
fun main() {
val students = arrayOf(Student(1,"张三",95.2f),Student(2,"王三",97.2f),
Student(3,"李四",57.2f), Student(4,"王五",57.2f)
)
//对象包含情况
val stu1 = Student(3,"李四",57.2f)
var arrIndex = searchData(stu1,students)
exportResult(arrIndex)
//对象不包含情况
val stu2 = Student(15,"张三",56.7f)
arrIndex = searchData(stu2,students)
exportResult(arrIndex)
}
//判断两个对象是否相同
fun <T> searchData(searchObj:T,data:Array<T>):Int{
for(obj in data){
if(searchObj?.equals(obj) == true){
return data.indexOf(obj)
}
}
return -1
}
//输出查询结果
fun exportResult(arrIndex:Int){
val message = if(-1 == arrIndex){
"没有在数组中找到数据"
}
else{
"找到数据,数据在数组中的下标为$arrIndex"
}
println(message)
}
package com.example.datastruct
class Student(var id:Int,var name:String,var scroe:Float){
//重写equals方法时不能传入Student类型
override fun equals(other: Any?): Boolean {
return when (other) {
!is Student -> false
else -> id == other.id && name == other.name
}
}
}