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

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

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

 基本查找:

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

索引的方式:

  1. public class BaseSearch {
  2.  
  3. private static int searchMode02(int[] arr, int mum) {
  4. int index=-1;
  5. for (int i = 0; i < arr.length; i++) {
  6. if (arr[i]==mum) {
  7. //在数组中
  8. index=i;
  9. break;
  10. }
  11. }
  12. //不在数组中
  13. return index;
  14. }
  15.  
  16. public static void main(String[] args) {
  17. int[] arr = new int[] {1,2,3,4,5,6,7,8};
  18. int result=searchMode02(arr, 10);
  19. System.out.println(result !=-1 ? "元素在数组中":"元素不在数组中");
  20. //元素不在数组中
  21. }
  22.  
  23. }

索引值判断的方式:

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

二分折半查找:

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

  1. /**
  2. *
  3. * @author liqh
  4. * @version 创建时间:2019年4月16日 上午9:12:56
  5. * @ClassName 类名称
  6. * @Description 二分查找实现
  7.  
  8. public class binarySearch {
  9. /**
  10. * @Title: main
  11. * @Description:二分查找数组中的元素
  12. * @param
  13. * @return void 返回类型
  14. * @throws
  15. */
  16. public static int findArrValue(int[] arr,int mum) {
  17. //定义数组最小元素索引
  18. int min=0;
  19. //定义数组最大元素索引
  20. int max=arr.length-1;
  21. //定义数组中间元素索引
  22. int mid = (min+max)/2;
  23. //判断中间值是否等于输入的数
  24. while (arr[mid]!=mum) {
  25. //判断中间索引值是否小于mum
  26. if (arr[mid]<mum) {
  27. //mum比中间值大,在右边,所以最小索引min需要中间值mid+1
  28. min=mid+1;
  29. }else if(arr[mid]>mum) {
  30. //mum比中间值小,在左边,所以最大索引值max需要中间索引值mid+1
  31. max=mid-1;
  32. }
  33. //如果一直递增的最小索引大于一直递减的最大缩影,那么就是没有找到
  34. if (min>max) {
  35. return -1;
  36. }
  37. //每次计算完之后,min和max都发生改变,中间索引值需要重新计算
  38. mid = (min+max)/2;
  39.  
  40. }
  41. return mid;
  42.  
  43. }
  44.  
  45. public static void main(String[] args) {
  46. int[] arr = new int[] {11,22,33,44,55,66,77,88};
  47. //返回0,表示在数组中,-1表示不再数组中
  48. System.out.println(findArrValue(arr, 11));
  49. //结果 0 在数组中
  50. }
  51.  
  52. }

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

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. Appium-Python-Windows环境搭建笔记

    Appium版本:1.11.0 操作系统:Windows7-64位 开发语言:Python 3.7.2 测试应用平台:安卓 5.1.1 Appium服务端 一.JDK 也许你会觉得很奇怪,我搭建Pyt ...

  2. F#周报2019年第16期

    新闻 Ionide试验版本 FSharp路线图介绍 Blazor官方预览 .NET Framework 4.8发布 .NET Core 3 Preview 4发布 需要来自FSharp.Data.Sq ...

  3. Mac学习

    碰到问题可以多查看帮助文件 快速上手 1,自动隐藏顶端菜单栏: 通用-> 外观 menu bar 2,docker 程序坞,左边为应用程序,右边是文件或者文件夹,38线 3,option -&g ...

  4. js 利用jquery.gridly.js实现拖拽并且排序

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. robotframework RF使用中需要安装的工具和库

    确保 Python 3.6.2 安装成功 安装 如下 RF使用中需要的工具和库 1. RF 在两个Python中安装 robotframework执行命令 pip install robotframe ...

  6. Java基础语法入门01

    Java基础语法入门01 学习java你要先进行去了解JDK,JRE,JVM JDK Java开发工具包 JRE Java语言开发的运行环境 JVM Java虚拟机,用于Java语言的跨平台所用. 当 ...

  7. k8s-No.1-概述与架构

    本章目录 k8s概述 k8s系统架构 k8s工作流程图 一  概述 k8s是什么 k8s是谷歌公司基于内部容器管理系统borg开源出的一个容器集群管理工具,它是用go语言开发,提供了容器的应用部署,规 ...

  8. delphi 调试查看变量值

    在debug状态,打开run下的add watch就可以添加需要查看的变量,可以各种格式显示非常方便

  9. CF653F Paper task

    题目链接:洛谷 首先我们不考虑本质不同这个限制. 既然不能直接用栈乱搞,我们就可以用一个前缀和的套路了. 我们将(设为1,将)设为-1,记前缀和为$s_i$,则$[i,j]$这一段是回文子串当且仅当 ...

  10. node.js爬取ajax接口数据

    爬取页面数据与爬取接口数据,我还是觉得爬取接口数据更加简单一点,主要爬取一些分页的数据. 爬取步骤: 1.明确目标接口地址,举个例子 : https://www.vcg.com/api/common/ ...