java数组和集合的元素查找类似,下面以集合为例。

数组集合元素查找分为两类:

  • 基本查找:
  • 二分折半查找:

 基本查找:

两种方式都是for循环来判断,一种通过索引值来判断,一种通过数组索引判断。

索引的方式:

 public class BaseSearch {

     private static int searchMode02(int[] arr, int mum) {
int index=-1;
for (int i = 0; i < arr.length; i++) {
if (arr[i]==mum) {
//在数组中
index=i;
break;
}
}
//不在数组中
return index;
} public static void main(String[] args) {
int[] arr = new int[] {1,2,3,4,5,6,7,8};
int result=searchMode02(arr, 10);
System.out.println(result !=-1 ? "元素在数组中":"元素不在数组中");
//元素不在数组中
} }

索引值判断的方式:

public class BaseSearch {

    private static boolean searchMode01(int[] arr, int mum) {
for (int i = 0; i < arr.length; i++) {
if (arr[i]==mum) {
//在数组中
return true;
}
}
//不在数组中
return false;
} public static void main(String[] args) {
int[] arr = new int[] {1,2,3,4,5,6,7,8};
System.out.println(searchMode01(arr, 10));
//结果false
} }

二分折半查找:

步骤:
1、定义最小索引和最大索引
2、计算中间索引
3、拿中间索引对应的数值和需要查找的数进行比较
  数值= 查找的数 返回中间索引
  数值 > 查找的数 在左边找
  数值 查找的数 在右边找
4、重复第二部
5、如果最小的数的值比最大值还要大,那么说明没有找到返回-1
6、二分查找的数组或者集合必须是有序的

 /**
*
* @author liqh
* @version 创建时间:2019年4月16日 上午9:12:56
* @ClassName 类名称
* @Description 二分查找实现 public class binarySearch {
/**
* @Title: main
* @Description:二分查找数组中的元素
* @param
* @return void 返回类型
* @throws
*/
public static int findArrValue(int[] arr,int mum) {
//定义数组最小元素索引
int min=0;
//定义数组最大元素索引
int max=arr.length-1;
//定义数组中间元素索引
int mid = (min+max)/2;
//判断中间值是否等于输入的数
while (arr[mid]!=mum) {
//判断中间索引值是否小于mum
if (arr[mid]<mum) {
//mum比中间值大,在右边,所以最小索引min需要中间值mid+1
min=mid+1;
}else if(arr[mid]>mum) {
//mum比中间值小,在左边,所以最大索引值max需要中间索引值mid+1
max=mid-1;
}
//如果一直递增的最小索引大于一直递减的最大缩影,那么就是没有找到
if (min>max) {
return -1;
}
//每次计算完之后,min和max都发生改变,中间索引值需要重新计算
mid = (min+max)/2; }
return mid; } public static void main(String[] args) {
int[] arr = new int[] {11,22,33,44,55,66,77,88};
//返回0,表示在数组中,-1表示不再数组中
System.out.println(findArrValue(arr, 11));
//结果 0 在数组中
} }

如果写的有什么问题,欢迎在下方评论指出来!

java数组集合元素的查找的更多相关文章

  1. Java依据集合元素的属性,集合相减

    两种方法:1.集合相减可以使用阿帕奇的一个ListUtils.subtract(list1,list2)方法,这种方法实现必须重写集合中对象的属性的hashCode和equals方法,集合相减判断的会 ...

  2. JAVA:数组,排序,查找<4>

    一.数组 1.一维数组 (1).数组的定义 数据类型 数组名[]=new 数据类型[大小] public class Demo1 { public static void main(String[] ...

  3. java数组集合

    一.ArrayList 1. ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组2. 如果增加的元素个数超 ...

  4. java list集合元素根据某些字段排序

    一.jdk1.6的环境下 新建ComparatorSort类,并实现Comparator接口,重写compare方法 降序排序:o1的元素>o2的元素,并返回-1:o1的元素小于o2的元素,并返 ...

  5. java 判断集合元素唯一的原理

    一 ArrayList的contains方法判断元素是否重复原理 ArrayList的contains方法会使用调用方法时,传入的元素的equals方法依次与集合中的旧元素 所比较,从而根据返回的布尔 ...

  6. java 数组插入元素

    import java.util.Arrays; public class AddArray { public static void main(String[] args) { int[] arr ...

  7. 面试题-Java基础-集合和数组

    1.Java集合类框架的基本接口有哪些? 集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序.有的集合类允许重复的键,有些不允许.Java集 ...

  8. Java-杂项:Java数组Array和集合List、Set、Map

    ylbtech-Java-杂项:Java数组Array和集合List.Set.Map 1.返回顶部 1. 之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊 ...

  9. java 数据类型:集合接口Collection之常用ArrayList;lambda表达式遍历;iterator遍历;forEachRemaining遍历;增强for遍历;removeIf批量操作集合元素(Predicate);

    java.util.Collection接口 Java的集合主要由两个接口派生出来,一个是Collection一个是Map,本章只记录Collection常用集合 集合只能存储引用类型数据,不能存储基 ...

随机推荐

  1. Python基础之集合

    一.定义: 二.基本操作: 三.运算: 交集&, 并集|, 补集-, 对称补集^, 子集<   超集> 四.集合推导式: 五.固定集合 frozenset 六.基本代码: # 1. ...

  2. JavaScript基础知识(Math的方法)

    Math的方法 Math : 对象数据类型 : Math: {} 是window下的一个键值对: 属性名叫Math,属性值是一个对象 var obj = {a:1}; console.log(obj. ...

  3. JAVA RPC (七) 手把手从零教你写一个生产级RPC之client请求

    上节说了关于通用请求代理,实际上对spring的bean引用都是通过koalasClientProxy来实现的,那么在代理方法中才是我们实际的发送逻辑,咱们先看一下原生的thrift请求是什么样的. ...

  4. cadence16.6 暴力破解出现再次安装出现问题为Sever-----------问题

    根据本人,实测,本人研究几天和在网络上借鉴,此方法是几天的成果,如有借鉴,请说明出处,谢谢,不懂的请留言. 最优解决方式,是自己卸载软件,有人会说,都完全删除了还怎么卸载软件. (1)在安装包里有个注 ...

  5. 常见MQTT服务器搭建与试用

    常见MQTT服务器搭建与试用   简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠 ...

  6. 2019-04-15 Python之利用matplotlib和numpy的简单绘图

    环境:win10家庭版, Anocada的 Spyder 一.简单使用 使用函数 plt.polt(x,y,label,color,width) 根据x,y 数组 绘制直,曲线 import nump ...

  7. 2019.04.21 python核心特征

    本阶段我们将了解Python是如何管理内存的,学习内存管理让我们掌握python的运行机制: 并且在python中有许多函数式编程的特性,比如闭包,装饰器和生成器,这些都是一些比较难掌握的概念,但面试 ...

  8. 2018-2019-2 20175211 实验二《Java面向对象程序设计》实验报告

    目录 代码托管 一.单元测试 (1)三种代码 二.TDD(Test Driven Development,测试驱动开发) 三.面对对象三要素 四.练习 五.问题及解决 六.PSP 代码托管 一.单元测 ...

  9. python commands包不支持windows环境与如何在windows下使用的简易方法

    commands模块不支持windows环境,让我们来看看. >>> import commands >>> print commands.getoutput('d ...

  10. selenium之chrome驱动版本

    chrome之selenium驱动: 各版本驱动,可以到如下地址下载,并查看版本: http://chromedriver.storage.googleapis.com/index.html 查看版本 ...