精华内容
下载资源
问答
  • String[] arr = new String[]{"a","b","c","d","e","eeee","f","g","a","h"}; Integer[] arr1 = new Integer[]{22,33,44,55,6,7,22,88,999}; searchOne(arr, "a"); searchOne(arr1, 33);...33在被查询数组的下标为:1
  • 数组常用方法之一:二分查找法的使用

    二分查找法

    • 概述
      二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找要求数组数据必须采用顺 序存储结构有序排列。
    • 原理
      首先,假设数组中元素是按升序排列,将数组中间位置的数据与查找数据比较,如果两者相等,则查找成功;否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数组,否则进一步查找后子数组。重复以上过程,直到找到满足条件的数据,则表示查找成功,直到子数组不存在为止,表示查找不成功。
    	Scanner scan = new Scanner(System.in);
    	int[] nums = new int[9];
    	//初始化数组,随机100以内的数
    	for (int i = 0; i < nums.length; i++) {
    		nums[i]=(int) (Math.random()*100);
    	}
    	System.out.println("初始数组为:");
    	for (int i : nums) {
    		System.out.print(i+"\t");
    	}
    	//二分查找需要一个有顺序的数组,所以对初始化的数组进行排序
    	for (int i = 0; i < nums.length-1; i++) {
    		for (int j = 0; j < nums.length-i-1; j++) {
    			if (nums[j]>nums[j+1]) {
    				int temp=nums[j];
    				nums[j]=nums[j+1];
    				nums[j+1]=temp;
    			}
    		}
    	}
    	System.out.println("\n排序后数组为:");
    	for (int i = 0; i < nums.length; i++) {
    		System.out.print(nums[i]+"\t");
    	}
    	 
    	//二分查找
    	//最小下标
    	int minIndex=0;
    	//最大下标
    	int maxIndex=nums.length-1;
    	//中间下标
    	int centerIndex=(minIndex+maxIndex)/2;
    	//查找元素
    	System.out.print("\n请输入需要查找的元素:");
    	int findNum=scan.nextInt();
    	
    	
    	while (true) {
    		if (nums[centerIndex]>findNum) {
    			//当查找目标小于中间值时,此时目标值在左边,此时最大下标为中间下标-1
    			maxIndex=centerIndex-1;
    		} else if (nums[centerIndex]<findNum) {
    			//当查找目标大于中间值时,此时目标值在右边,此时最小下标为中间下标+1
    			minIndex=centerIndex+1;
    		}else {
    			System.out.println("查找元素"+findNum+"的下标为:"+centerIndex);
    			break;
    		}
    		
    		if (minIndex>maxIndex) {
    			//当最小下标大于最大下标时,说明找不到目标值
    			System.out.println("查找元素的下标不存在");
    			break;
    		}
    		//每次查找后边界都会发生变化,所以就重新更新中间下标
    		centerIndex=(minIndex+maxIndex)/2;
    	}
    	
    
    	// 关闭扫描,释放资源
    	scan.close();
    

    效果图
    在这里插入图片描述

    展开全文
  • java数组中根据数据查找下标

    千次阅读 2020-07-28 16:18:52
    public class javaDemo2 { public static void main(String[] args) { int num[] = {2,6,9,4,7,6,3,1,5}; System.out.println("请输入你的数据:"); int number = 6; for(int i = 0 ; i < num.length ; i ++)...
    public class javaDemo2 {
        public static void main(String[] args) {
            int num[] = {2,6,9,4,7,6,3,1,5};
            System.out.println("请输入你的数据:");
            int number = 6;
            for(int i = 0 ; i < num.length ; i ++){
                if(num[i] == number){
                    System.out.println(i);
                }
            }
        }
    }
    展开全文
  • JAVA】二分法查找指定元素下标

    千次阅读 2018-11-08 16:39:58
    如果,我们要在一个List在中查找某个指定的元素,可以使用二分法,从而大大降低查询效率,前提是所给定的数组是已经排序的; 下面是一个小小的例子 public class BinarySearch{ public static void main(String...

    如果,我们要在一个数组中查找某个指定的元素,可以使用二分法,从而大大降低查询效率,前提是所给定的数组是已经排序的;
    下面是一个小小的例子

    public class BinarySearch{
    	public static void main(String[],args){
    		int[] intList = {1,2,3,4,5,6,7,8,9,10};
    		int target = binarySearch(intList,8);//查找元素8所在的下标;
    		System.out.println("目标下标为:"+target);
    	}
    
    	public static int binarySearch(int[] list,int key){
    		int low = 0;
    		int high = list.length - 1;
    		while(high>=low){
    		int mid = (low+high)/2;
    		if(mid<list[mid])
    			high = mid - 1;
    		else if(mid==list[mid])
    			return mid;
    		else
    			low = mid + 1;
    		}
    		return -low;
    	}
    }
    

    如果查找到,方法会返回该值对应的下标,如果没找到,方法会返回该目标值应该插入的下标的负值;
    但是,这里有一个问题,如果数组有重复值,例如int[] intList = {1,2,3,4,5,6,7,8,8,8,9,10};
    方法只会返回中间那个8所在的位置

    展开全文
  • 这个要从为什么java8会弄出stream这种循环方式说起了以前的for循环是属于外部循环,由调用者自己显式的取出每个元素加以处理,尤其是并行处理时,非常痛苦而stream是属于内部循环,你可以无需关心它是如何循环的,...

    这个要从为什么java8会弄出stream这种循环方式说起了

    以前的for循环是属于外部循环,由调用者自己显式的取出每个元素加以处理,尤其是并行处理时,非常痛苦

    而stream是属于内部循环,你可以无需关心它是如何循环的,要是并行的时候如何优化,这些你都可以不管,你只需要简简单单告诉他需要做什么处理即可

    举个简单的例子:

    地上有很多乒乓球,爸爸要让你儿子捡起来放到盒子里

    如果是外部循环,可能这种模式

    爸爸:地上还有球么

    儿子:有

    爸爸:那把它捡起来放到盒子里,还有么?

    儿子:有

    爸爸:继续捡起来放到盒子里,还有么?

    儿子:有

    爸爸:接着捡起来放到盒子里,还有么?

    儿子:没有了

    爸爸:ok,收拾好了

    如果是内部循环

    爸爸:把地上的球捡起来全部放到盒子里

    儿子:好,完成

    例子可能很牵强,但是我们作为开发者,就是爸爸,只需要告诉儿子(JDK)把球放进盒子这个动作就好,具体儿子怎么放,一次一个手拿一个,还是一次每个手拿一个,由它自己来思考,不需要我们去指挥,我们只关注具体需要做的事就好

    所以说stream是一种内部循环,你不需要去关注下标...关注下标的话,从某种意义上来说,还是外部循环的思想在处理了,当然题主的问题中,明确就是要求是关注下标了,貌似好像stream是没法写似的

    其实不然,写肯定能写的,只是说换一种方式而已,不把下标当成循环用的元素,而是把它与具体需要循环的数字绑定起来,写出来差不多是这个样子

    public static void main(String[] args) {

    List list = Arrays.asList(1,3,5,7,9);

    Map> collect = IntStream.rangeClosed(1, list.size())

    .boxed()

    // 把数字和下标绑定起来

    .map(i -> mapToEntry(i, list.get(i-1)))

    // 按照下标是否能被2整除进行分组

    .collect(Collectors.partitioningBy(simpleEntry -> Integer.parseInt(simpleEntry.getKey().toString()) % 2 == 0,

    Collectors.mapping(Map.Entry::getValue, Collectors.toList())));

    // 偶数列表 3,9

    List evenList = collect.get(Boolean.TRUE);

    // 奇数列表 1,5,7

    List oddList = collect.get(Boolean.FALSE);

    }

    private static AbstractMap.SimpleEntry mapToEntry(Integer i, Integer integer) {

    return new AbstractMap.SimpleEntry(i, integer);

    }

    展开全文
  • 复制代码 代码如下://常规实现一:function isHasElementOne(arr,value){for(var i = 0,vlen = arr.length; i < vlen; i++){if(arr[i] == value){return i;}}return -1;}//实现二:function isHasElementTwo(arr,...
  • (注意:本文源码基于...indexOf方法,用于从头到尾的从ArrayList查找一个指定元素对象的下标 lastIndexOf方法,用于从尾部到头部的从ArrayList中查找一个指定元素对象的下标 get方法 public E get(int inde...
  • public class DemoArrayIndex { public static void main(String[] args) { int[] scores ={12,3,4,45,2,43,564,3,-54};... //查询数组元素下标 public static int index(int[] arr,int num){ int ind
  • java数组中根据元素查找位置 索引

    万次阅读 2017-04-13 22:38:48
    Arrays提供了一个方便查询的方法 :Arrays.binarySearch();  public static void main(String[] args) {  // TODO Auto-generated method stub  String[] arrays = new String[]{"a","b","c","d","e","fff",
  • 以下实例演示了如何使用 contains () 方法来查找数组中的指定元素:例子1import java.util.ArrayList;public class Main {public static void main(String[] args) {ArrayList objArray = new ArrayList();ArrayList...
  • import java.util.Scanner;... //数组元素查找(查找指定元素第一次在数组中出现的下标 //(1)给定数组int[] arr = {5,7,3,2,5}; //(2)要查询的元素通过键盘录入的方式确定 int[] arr = {5, 7, 3, 2, .
  • java获取数组连续相同元素下标

    千次阅读 2016-07-01 14:14:02
    java判断数组连续相同项以及不连续的项下标
  • String :dd num :2 String :AA num :3 String :BB num :3 String :ff num :1 String :cc num :2 ============相同元素下标====================== [[3, 7], [4, 8, 10], [1, 5, 9], [2, 6]] 
  • Java 二分法查找数组元素
  • 折半查找法折半查找法具体实现1、主函数内部实现2、定义方法,并调用:3、调用Arrays中的binarySearch方法:总结 ...如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找
  • (此类中的方法采用的是二分法进行查找,所以需要先对原数组进行排序,获得的是新数组中该数字的下标) 代码如下: package come.base; import java.util.Arrays; public class Arrayxiabiao { public static void ...
  • 如果你想知道LinkedList持有的某个元素,它所属的下标是什么?既可以使用indexOf()方法、或者lastIndexOf()方法,那么它们之间的区别是什么呢?一起分析一下 indexOf(Object)方法分析 public int index...
  • 功能需求:遍历数组,并求出数组中元素的最大元素,最小元素,及其相应的索引等问题,要求用方法完成. 思路:分别创建不同的方法,然后再调用方法. 代码展示: public class Array{ public static void main(String[] ...
  • 顺序查找数组中的指定元素 给定一个数组,在给定一个元素,找出该元素在数组中的位置(输出的是该元素在数组中的下标) public static void main(String[] args) { int[] array = {12, 14, 16, 18, 20, 28}; ...
  • 但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 要使用二分查找有两个条件 1.必须是经过排序的数据集合 2.只适用于顺序储存的数据集合 话不多说,举个例子 设数据集合 D{5,13,17,42...
  • * Goal:用二分查找算法找出一个数在数组中的下标 * Author:Tang.Mitnick * Site:FaFu * */ //设计思想:对一个数组中的数组进行折半查找,确定给出的数对应的在数组中的下标。 public class BinarySearch { ...
  • 这些查找元素的方法有个共同特点:只查找出元素,不会删除元素,我们一起分析一下 get()方法分析 public E get(int index) { checkElementIndex(index); return node(index).item; } 用于获取指定下标的...
  • 查找数组中的元素 查找——给定查找数返回数组第一次出现下标值 方法一: class ArraySearch{ public static void main(String[] args) { //定义数组 // int[] arr={1,6,3,2,8,9}; //无序数组 int[] arr={1,2,...
  • java编程某一程序,要求:对于一个长度为20的一维整形数组,编程实现查找值为60的元素在数组中的位置,若不存在,则提示“未找到60”。
  • java list集合元素根据某些字段排序

    千次阅读 2021-03-17 03:52:46
    一、jdk1.6的环境下新建ComparatorSort类,并实现Comparator接口,重写compare方法降序排序:o1的元素>o2的元素,并返回-1;o1的元素小于o2的元素,并返回1升序排序...import java.util.Comparator;import app.com...
  • /* * 二分法查找数组中的数值下标 */import java.util.Scanner;public class TwopointSearch { public static void main(String [] args){ int []arr={1,3,4,5,2,6,7,9,8,0,11,13,15,17,19,20,12,14,16,18}; int...
  • 数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为0,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。 ...
  • 看结果明显是错的,但是代码又没有编译错误,可能是逻辑问题?我也不知道是哪里出了问题,希望得到指点,谢谢~

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,477
精华内容 30,190
关键字:

java根据下标查找元素

java 订阅