黑马程序员——Java基础-数组

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

概念 数组就是同一种类型那个数据的集合,是一个容器,是引用类型,存储在堆中。
好处:可以自动给数组中的元素从0开始编号,方便操作这些元素
格式: 1. int[] arr=new int[5]; 创建一个长度为5 的,变量名为arr,类型为整型的数组。
      2. int[] arr=new []{5,6,8,3,4}
         int[] arr={5,6,8,3,4}

数组中常见问题:
1、数组角标越界 //ArrayIndexOutofBoundsException
2、空指针异常  //NUllPointerException 当引用没有任何指向,值为空的情况,该引用还在用于操作实体。

数组的操作:
1.获取数组中的数据,通常会用到遍历(for循环),arr.length代表数组的长度
代码:
  int[] arr=new int[5];
  for(int x=0;x<arr.length;x++)
  {
        arr[x];
  }

2.打印数组中的元素,元素间用逗号隔开。

   int[] arr=new int[5];
  for(int x=0;x<arr.length;x++)
  {
         if(x!=arr.length-1)
          System.out.print( arr[x]+",");
         else
           System.out.print( arr[x]);

  }

3.获取最值
      //定义一个方法,返回最大值角标
           public static int  getmax(int[] arr){

                      int max=0; //定义一个变量初始化数组的0角标值
		for(int x=0; x<arr.length;x++){//循环遍历数组
			if(arr[max]<arr[x]){//如果临时元素小于遍历到的元素
				max=x;//将遍历到的值的角标付给临时变量角标
			}
		}
	return max;	//返回最大值角标
	}
4.数组排序-选择排序:内循环结束一次,最值出现在头角标位置上,第一个依次和后面的几个相比较

      public static void  xuanze(int[] arr){

		for(int x=0; x<arr.length-1;x++){//控制比较的圈数

			for(int y=x+1;y<arr.length;y++)//控制每圈比较的次数
			{
				if(arr[x]>arr[y]){
					int temp=arr[y];
					arr[y]=arr[x];
					arr[x]=temp;

				}

			}
		}

5.数组排序-冒泡排序:相邻的两个元素进行比较,第一圈,最值出现在最后。

         public static void  maopao(int[] arr){

		for(int x=0; x<arr.length-1;x++){//控制比较的圈数

			for(int y=0;y<arr.length-x-1;y++)//控制每圈比较的次数  -1是避免角标越界,-x是让每一次比较的元素减少
			{
				if(arr[y]>arr[y+1]){
					int temp=arr[y+1];
					arr[y+1]=arr[y];
					arr[y]=temp;
				}
			}
		}
6.数组置换

     public static void  maopao(int[] arr,int x, int y){

                             int temp=arr[x];
					arr[x]=arr[y];
					arr[y]=temp;

     }

7.数组的一般查找:获取key第一次出现在数组中的位置,如果返回-1,则不存在
    public static int  select(int[] arr,int key){

		for(int x=0; x<arr.length;x++){
			if(arr[x]==key){

				return x;
			}
		}
			return -1;
	}

8.数组的折半查找:可以提高查找效率,但是必须是有序数组
第一种方式:
  先找到头角标 和尾角标
  min =0 //头角标
  max=arr.length-1;//尾角标
  mid =(min+max)/2;//中间角标
  在要找得的值和中间角标不相等的情况下,循环查找。
  如果要找的值比中间角标值大的话,头角标就是中间角标+1;
  如果要找的值比中间角标小的话,尾角标就是中间角标-1;
  中间角标重新赋值 mid =(min+max)/2;//中间角标
   查找之后,如果头角标大于了尾角标的话 ,数组中就没有这个值,

第二种方式:
   如果头角标和尾角标之间有距离,也就是说头角标和尾角标小于等于尾角标的时候,就进行折半。否则不存在 返回 -1

   mid =(min+max)/2;//中间角标

   之后呢  如果要找的值比中间角标值大的话,头角标就是中间角标+1;
  如果要找的值比中间角标小的话,尾角标就是中间角标-1;
如果相等的话 就返回中间角标值。找到了

面试题:在有序的数组中,插入一个值,插入之后还保证数组是有序的。获取该元素在数组中的位置。
 返回的就是最小角标的值就是min的位置  。
时间: 2024-10-11 17:56:29

黑马程序员——Java基础-数组的相关文章

黑马程序员-java基础-数组&amp;进制转换

第一讲  数组初始化&操作 1.  数组定义 概念:数组是同一种类型数据的集合,其实数组就是一个容器.数组中的元素从0开始编号,这样方便了对这些元素进行操作(获取.修改改.排序等). 数组的定义格式有: Int[] arr = new int[10]; ——这里指定数组的长度,后续需要分别对每一个元素赋值: Int[] arr = new int[]{2,1,5,9}:——创建数组实体并初始化,不需要指定长度: Int[] arr = {2,1,5,9};——定义数组并初始化: 2.  数组操作

黑马程序员-java基础-数组的反射

数组是一个对象,具有相同维数和元素类型的数组具有相同的字节码(相同类型). 所有数组其父类都是object.Object o = new int[2] 或者 Object o = new int[2][2];不会报错 基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用: int[] arr = new int[2]; Object o1 = arr Object[] o2 = arr //会报错 Object[] o3 = new Object[2][2];可以,

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

黑马程序员——java基础---IO(input output)流字符流

黑马程序员——java基础---IO(input output)流字符流 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- io(input output)流特点: 1,io流用来处理数据之间的传输 2,java对数据的操作是通过流的方式: 3,java用于操作流的对象都在io包中: 4,流按操作数据分为两种:字节流和字符流: 5,流按流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象

黑马程序员——java基础——反射

 黑马程序员--java基础--反射 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 反射 其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员. 反射就是把Java类中的各种成分映射成相应的java类. 简单说:反射技术可以对一个类进行解剖. 反射的基石-->Class类 1.java中的类是用来描述一类事物的共性,该类事物有什么属性,没有什么属性

黑马程序员——java基础——集合(Collection)

 黑马程序员--java基础--集合(Collection) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 集合框架的构成及分类,如下图: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 3.

黑马程序员--java基础学习笔记5

黑马程序员--java基础学习笔记6 一.笔记内容概述: 数组-第二种定义格式.数组-常见操作-遍历-最值-选择排序-冒泡排序-排序位置置换代码提取.数组-排序的性能问题.数组-常见功能-查找-折半查找.进制转换-查表法-整合. 二.常用内容介绍: 1.数组初始化的三种方式: int[] arr = new int[3]; int[] arr = new int[]{1,2,3}; int[] arr = {1,2,3}; 2.查表法: 如果数据中出现了对应关系,而且对应关系的一方是有序的数字编

黑马程序员——Java基础---io(上)

黑马程序员——Java基础---io(上) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象.如果数据流中最小的数据单元是字节,那么称这种流为字节流:如果数据流

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正