标签分类
技术文章
当前位置:主页 > 计算机编程 > java > java数组中的数值是否连续判断

java判断数组中的数值是否连续相邻的方法总结

  • 发布时间:
  • 作者:码农之家原创
  • 点击:220

java数组中的数值是否连续判断

这篇文章主要知识点是关于java,判断数组,数值连续,java数组中的数值是否连续判断,详解Java中数组判断元素存在几种方式比较 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Java工程师修炼之道
  • 类型:Java大小:87.17 MB格式:PDF出版:电子工业出版社作者:杭建
立即下载

更多相关的学习资源可以参阅 程序设计电子书Java电子书Java视频、等栏目。

* 判断一个数组中的数值是否连续相邻

* 满足以下条件:

* 1.0是例外可以反复出现 0可以通配任何字符
* 2.相同的数值不会重复出现
* 3.该数组可以是乱序的
* 当数组不含有0时满足最大值-最小值=n(数组长度)-1
* 当数组数组含有0时.满足最大值-最小值<n(数组长度)-1

* 所以,当最大值最大值-最小值>n(数组长度)-1时,一定不是连续相邻数组

package datastruct.usearray;
public class JudgeAdjacent {
	  private static boolean judege(int a[]) {
		  int min=Integer.MAX_VALUE;
		  int max=Integer.MIN_VALUE;
		 
		  for (int i = 0; i < a.length; i++) {
			 if (a[i]!=0) {
				 if (min>a[i]) {
					min=a[i];
				}
				 if (max<a target="_blank">a.length-1) {
			return false;
		}else {
			return true;
			
		}
		  
	}
    public static void main(String[] args) {
     int a[]={8,5,0,10,6,7,0,0};
			if (judege(a)) {
				System.out.println("该数组是相邻的!");
			}else {
				System.out.println("该数组不是相邻的!");
			}
		}
}
</a>

以上这篇java 判断一个数组中的数值是否连续相邻的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

详解Java中数组判断元素存在几种方式比较

1. 通过将数组转换成List,然后使用List中的contains进行判断其是否存在

public static boolean useList(String[] arr,String containValue){
    return Arrays.asList(arr).contains(containValue);
  }

 需要注意的是Arrays.asList这个方法中转换的List并不是java.util.ArrayList而是java.util.Arrays.ArrayList,其中java.util.Arrays.ArrayList中不能对数组的长度进行扩容操作,这个尤为重要,其中contains实现如下:

@Override
public boolean contains(Object o) {
  //调用indexOf方法判断其在那个位置,判断其时候为-1
   return indexOf(o) != -1;
}
@Override
public int indexOf(Object o) {
  //获取元素
  E[] a = this.a;
  //判断空
  if (o == null) {
    //循环判断
    for (int i = 0; i < a.length; i++)
      //如果元素为null
      if (a[i] == null)
       //则返回
       return i;
  } else {
    //如果其不为空
    for (int i = 0; i < a.length; i++)
     //判断元素与a[i]是否相等
      if (o.equals(a[i]))
       //相等返回i
       return i;
  }
      //否则返回-1
      return -1;
} 

2. 使用Set进行实现判断是否存在

public static boolean useSet(String[] arr,String containValue){
    return new HashSet<>(Arrays.asList(arr)).contains(containValue);
  }

  原理将数组->List->Set使用Set进行比较

源码:通过调用map的containsKey实现的,而hashmap中则是通过遍历hash表中的key实现

ypublic boolean contains(Object o) {
    return map.containsKey(o);
  }

3. 使用循环来实现,自己编写一个循环来判断

public static boolean useLoop(String[] arr,String containValue){
    //判断是否为空
    if (arr==null||arr.length==0){
      return false;
    }
    for (int i = 0; i < arr.length; i++) {
      //all null
      if (containValue!=null&&containValue.equals(arr[i])){
        return true;
      }else if (arr[i]==null){
        return true;
      }
    }
    return false;
  }

4. 使用org.apache.commons.lang3.ArrayUtils中的contains方法来实现

public static boolean useUtils(String[] arr,String containValue){
    return ArrayUtils.contains(arr,containValue);
  }

具体实现源码:

public static boolean contains(final Object[] array, final Object objectToFind) {
    //调用indexof进行判断位置
    return indexOf(array, objectToFind) != INDEX_NOT_FOUND;
  }
  public static int indexOf(final Object[] array, final Object objectToFind, int startIndex) {
    //判断null
    if (array == null) {
      return INDEX_NOT_FOUND;
    }
    //判断起始位置
    if (startIndex < 0) {
      startIndex = 0;
    }
    //判断查询元素是否为null
    if (objectToFind == null) {
      //null则直接使用==进行循环判断位置
      for (int i = startIndex; i < array.length; i++) {
        if (array[i] == null) {
          return i;
        }
      }
     //判断元素是不是array中的元素的实例,如果是则循环并采用equals进行判断
    } else if (array.getClass().getComponentType().isInstance(objectToFind)) {
      for (int i = startIndex; i < array.length; i++) {
        if (objectToFind.equals(array[i])) {
          return i;
        }
      }
    }
    //返回没有找到
    return INDEX_NOT_FOUND;
  }

  使用循环1w次来检测效率

public static void reCompileArr(String[] arr,String containValue){
  //using List
  long start = System.nanoTime();
  for (int i = 0; i < 10000; i++) {
    useList(arr,containValue);
  }
  long end=System.nanoTime();
  System.out.println("using list->"+(end-start)/10000);
  //using set
  start = System.nanoTime();
  for (int i = 0; i < 10000; i++) {
    useSet(arr,containValue);
  }
  end=System.nanoTime();
  System.out.println("using set->"+(end-start)/10000);
  //using loop
  start = System.nanoTime();
  for (int i = 0; i < 10000; i++) {
    useLoop(arr,containValue);
  }
  end=System.nanoTime();
  System.out.println("using loop->"+(end-start)/10000);
  //using utils
  start = System.nanoTime();
  for (int i = 0; i < 10000; i++) {
    useUtils(arr,containValue);
  }
  end=System.nanoTime();
  System.out.println("using utils->"+(end-start)/10000);
}

  结果如下图:

using list->973
using set->2676
using loop->448
using utils->1364

 使用的jdk版本为jdk1.8.0_172版本,由上面可以推断出来

以上四种方法的效率高->低

loop>list>utils>set

对比之下,其实可以看出,采用loop方法进行判断的效率最高,再过去list,再过去utils再过去set

总结:

分析一下慢的原因:

loop最快,直接操作array,毫无疑问

list次之,由于需要创建一个java.util.Array.ArrayList,创建对象需要时间所以会更慢一些

util第三,由于其虽然使用的和loop差不多,但是array.getClass().getComponentType().isInstance(objectToFind),该段代码采用调用了本地native方法,我们知道,通过调用本地native方法会比直接调用java方法更加耗时。而且查看源码可知getClass()与getComponentType()以及isInstance都是native方法,非常耗时

set最差,由于其先将Array转换成List,再讲list转换成Set,在Set中又是采用HashMap来实现的,由于其多次转换对象,自然,效率也肯定好不到哪里去了。

其实我个人还是比较喜欢使用ArrayUtils进行操作,虽然说相对相率低一点,但是还会不会差很多。 

以上所述是小编给大家介绍的详解Java中数组判断元素存在几种方式比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持! 

以上就是本次给大家分享的全部知识点内容总结,大家还可以在下方相关文章里找到解决axios.interceptors.respon、 vue项目中使用md5加密以及、 儿童python编程入门书籍推、 等java文章进一步学习,感谢大家的阅读和支持。

上一篇:java微信小程序开发中加密解密算法总结

下一篇:Hadoop之NameNode Federation知识点总结

展开 +

收起 -

学习笔记
网友NO.644812

Java二维数组计算集合总结

public class CrossSum{ public static void main(String args[]){ int [][]a = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25}} ; int transverse =0; //横 int vertical =0; //竖 for(int i = 0; i 5; i++){ transverse = transverse+ a[2][i]; //通过下标访问 } for(int j = 0; j 5; j++){ vertical = vertical+ a[2][j]; } System.out.println("5*5数组十字和为"+(transverse+vertical)); } } public class LeftSum{ public static void main(String args[]){ int [][]a = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25}} ; int sum =0; for(int i = 0; i 5; i++){ sum = sum+ a[i][i]; } System.out.println("5*5数组↘="+sum); } } public class RightSum{ public static void main(String args[]){ int [][]a = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25}} ; int sum =0; for(int j = 4; j =0; j--){ sum = sum+ a[j][j]; } System.out.println("5*5数组↙="+sum); } } ……

网友NO.985992

Java如何找出数组中重复的数字

题目描述:找出数组中重复的数字,具体内容如下 在一个长度为n的数组里的 所有数字都在 0~n-1的范围内 。数组中 某些数字是重复的 ,但不知道有几个数字是重复的,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如:如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出的是重复的数字2或者3 这个面试题是剑指offer中的面试题3,,下面我用java代码实现。 算法步骤: 从头到尾依次扫描数组中的每个数字。 1. 当扫描到下表为i的数字时,首先比较这个数字(用m表示)是不是等于下标i; 2. 如果是,则接着扫描下一个数字;如果不是,则再拿它和第m个数字进行比较。 3. 如果它和第m个数字相等,就找到了一个重复的数字(也就是下标 i 和下标 m 的位置都出现了) 4. 如果它和第m个位置数字不相等,就把第i个数字和第 m 个数字交换。 5. 接下来我们再重复这个比较、交换的过程,知道我们发现一个重复的数字。 import java.util.Scanner; public class Main { public static void getRepeateNum( int[] num) { int NumChange; System.out.println("重复数字是:"); for(int index = 0; index num.length; index++) { while(num[index] != index) { if(num[index] == num[num[index]]) { System.out.print(num[index]+" "); break; } else { NumChange = num[num[index]]; num[num[index]] = num[index]; num[index] = NumChange;……

网友NO.744238

java~springboot~ibatis数组in查询的实现方法

在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如where in这种从数组里查询符合条件的集合里,需要在xml里进行特别的处理。 update id="batchUpdate" parameterType="map" update customer_info set status=#{status},appoint_time=#{appointTime} where customer_id in foreach collection="customerIdArr" item="customerId" index="index" open="(" close=")" separator="," #{customerId} /foreach /update 我们可以看到,在xml里进行了foreach的遍历,而外部参数是一个集合或者数组的对象,我们在xml对它进行遍历,还是比较方便的。 技巧:在xml里,parameterType是输入参数类型,你可以使用map对象来代替;而resultType是返回类型,如果你没有定义 DTO也可以使用map代替,虽然map可以让我们的代码变简洁,当然也有缺陷,就是会写很多弱类型的属性名。 总结 以上所述是小编给大家介绍的java~springboot~ibatis数组in查询的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持! ……

网友NO.894476

Java中将String类型依照某个字符分割成数组的方法

将下列字符串,依照|拆分成数组: String numbers = "1|2|3|4|5"; 使用split拆分 String[] numberArray = numbers.split("\\| "); 以上这篇Java中将String类型依照某个字符分割成数组的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明