---数组的定义---组织存储一组数据
1.存放相同类型数据的集合--就是一种容器本质上变量也是一种容器--区别就是只存储了一个数据的容器--面对容器,而不是分散的数据
eg.买一盘鸡蛋--蛋托其实就是容器
2.数组可以开始从0自动编号--进而可以通过下标方便的访问每个数据
3.数组本质就是对象,数组名就是存储该数组对象的地址,数组的元素相当于对象的成员变量--会被进行默认初始化
4.数组声明和初始化格式--
*直接声明并初始化(静态初始化方式) int[] arr = {1,2,3};
*先创建再初始化 int[] arr = new int[3]; arr = {1,2,3};
*两种定义方式的选择
静态初始化---需要容器并明确所存储的元素
动态初始化---需要容器不明确所要存储的元素
-----数据一多---就自动联想到使用容器来存储-----设计到容器方面的知识要重点学--计算机目的是处理现实生活中的数据--怎样存储数据---数据之间不同的关系---可能会选择不同的容器进行存储
int--表示数组元素的类型
arr--数组名代表整个数组本质是数字对象的地址
new--用来创建对象的关键字
3--代表数组的长度(一旦确定就不能改变)
---JVM运行程序时候对申请到的内存划分---划分原因不同的区域数据的处理方式不同
(其实很多程序对申请到的内存也会划分)
1.寄存器--CPU相关,不用过于关注
2.本地方法区--与JVM所属系统相关
3.方法区
4.栈内存--存储局部变量(定义在方法内部)
局部变量加载具体过程-->主函数加载-->所在方法加载-->变量在栈中被创建赋值-->一旦出了变量的作用域就会释放变量所占的空间-->方法执行完后也会释放其所占的空间。
栈内存更新速度很快
5.堆内存--用来存储一切对象实体(凡是new处来的东西)--堆的特点
1.每一个实体都有一个首地址值--将其赋值给对象的引用
2.每个实体都会有自己的数据互相不影响--并且会进行默认初始化
整数-0 float-0.0f double-0 boolean-false char-'\u0000'
\u代表的是unicode编码--文字数字符号等在计算机中的对应形式
3.引用数据类型变量--引用/指向了堆内存中的某个实体、或者未指向任何实体-null
4.对象所占内存不会自动释放--java有特有的GC垃圾回收机制
(就会存在对象会在堆中占内存--具有何时回收要看具体的垃圾回收算法控制)
C++里面是程序员手动垃圾回收垃圾--否则会出现内存溢出
5.引用变量之间赋值--结果就是执行相同的对象
只要有引用变量指向--该对象就不是垃圾,肯定不会被回收

---数组定义时的内存划分---
创建对象的引用--创建对象--将对象的地址赋值给对象的引用

---数组操作的小细节---
1.下标范围0-length-1(访问超出范围就会下标越界异常)int[3]--arr[3]编译合法,运行越界ArrayIndexOutOfBoundsException
2.编译时就是在检查语法错误,运行才会真正的占有内存空间
3.没有被指向的实体就不能被操作--否则出现NoPointerException-空指针异常
4.打印数组名--本质就是对象的首地址 符号+数字(哈希值-按照值找地址)哈希算法--调用windows的哈希算法--操作系统控制内存分配
符号-实体的类型
5.通过下标访问数组中的元素
---数组相关操作---最根本的操作:存数与取数(变量也是)
核心思想:就是对角标进行操作
1.遍历数组中的元素--循环 数组长度length--是数组自身的属性
2.获取最值(两种实现方式)
假设第一个位置最大(角标比较)arr[maxIndex]与arr[i]比较-返回最大值得角标
假设第一个位置的值最大(值比较)max与arr[i]比较-返回最大值

3.排序(冒泡,选择)--基本动作就是比较和交换(元素)
选择排序--思想:第一个为基准和后面一次比较,找出最小的元素和第一个交换--算一次排序,经过多次排序最后元素完全有序。
**选择排序效率优化--用两个变量记录内循环比较后的最小的位置,直接交换一次。
性能优化对于元素较多的情况才有意义
排序次数=元素个数-1;每次比较的次数递减的,每排序一次就确定一个元素的位置
冒泡排序--相邻元素之间的比较-交换,每次排序定出最大或最小

4.顺序查找(最常见--用于无序数组)--效率比较低
折半查找(用于--数据有序)--缩小范围(low mid high设置3个下标)
对于折半查找每次--arr[mid]是否和key值相等,循环判断的条件有以下两种
--arr[mid]是否等于key
--low <= high(就说明一旦存在low >high说明要查找的元素不在数组中)
数组一旦创建数组的长度就固定了
Java--里面的util包里面有一个Arrays类定义了许多关于数组的常见操作的方法
最好自己能掌握这些常见的排序查找的代码--其他语言不一定会提供相应的方法
Arrays.binarySearch()
找不存在的值--(-min - 1)--告诉不存在以及插入位置
找存在的值--返回的下标的位置
-----数组的应用----
1.什么时候使用数组---重要
如果数据出现了对应关系,如果对应关系的一方是有序数字,作为角标--可以使用数组
就可以将这些数据存储在数组中,将结果当作角标--访问数据---查表法(比较常见的应用)
数据--只要比较多就要考虑用数组存储起来集中处理
数组--作为临时容器使用
2.进制转化(基础数据类型封装类里面包含数字进制转化的方法)
十进制---二进制 &1 >>>1
十进制---八进制&7 >>>3
十进制---十六进制&15 >>>>4
观察上面的规律 &变量1 右移变量2 定义方法时候传参数进去,定义临时数组将查表得出来的数据进行存储,打印最后得到结果。临时数组[32]
对于查表法的应用---存在对应关系以及有序的编号
----二维数组---数组里面装的数组
1.二维数组定义
** int[][] arr= new int[3][2];
arr.length = 3 创建一个二维数组其中含有3个一维数组,每一个一维数组中含有2个元素

** 先定义二维数组的长度,再分别定义其中一维数组的长度
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[4];
静态初始化
int[][] arr = {{1,2},{3,4},{5,6}};
2二维数组名arr--依然是二维数组的首地址
arr[0]--代表的是二维数组下标为0的一维数组地址
arr[1]--代表的是二维数组下标为1的一维数组地址
arr[2]--代表的是二维数组下标为2的一维数组地址
arr[i][j]---打印二维数组中所有元素(嵌套循环)
3.二维数组的内存划分
二维数组名指向是含有3个引用的实体,3个引用分别指向3个含有2个元素的一维数组
实体在堆中都有自己的内存地方
记住一点:输出语句打印的全部是以字符串的形式出现,每次启动JVM就会重新
4.打印二维数组的长度arr.length
打印二维数组中某个一维数组的长度arr[i].length
5.遍历二维数组的长度--for循环嵌套
6.二维数组的应用场景
数据多,且要分类,数组多了也存储---进而出现多维数组
多个瓶子-多个盒子-一个箱子(可以更方便的处理数据)

---核心是掌握实现原理+思想-----并非是API的使用+框架的使用

Java基础总结--数组的更多相关文章

  1. Java基础-反转数组

    /** java基础,如何将一个数组反转,思考方法采用使用临时变量的情况下,将第一个元素与第二个元素进行反转,需要定义两个索引,一个记录数组的第一个元素与最后一个元素,将其两两交换* */public ...

  2. Java基础之 数组详解

    前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...

  3. java基础(十) 数组类型

    1. 数组类简介   在java中,数组也是一种引用类型,即是一种类. 我们来看一个例子,理解一下数组类: public static void main(String[] args) { Class ...

  4. java 基础概念 -- 数组与内存控制

    问题1: Java在声明数组的过程中,是怎样分配内存的? 在栈内存中 建一个数组变量,再在堆内存中 建一个 数组对象.至于详细的内存分配细节,还得看 该初始化是 数组动态初始化 还是 数组静态初始化. ...

  5. Java基础:数组的声明,循环,赋值,拷贝。

    数组的声明 一般有两种形式的声明: int[] a; int a[]; 这两种声明都没错,但是大多数都使用第一种声明,因为变量名是独立的,不带任何符号. 声明一个数组,并没有将a真正的初始化为一个数组 ...

  6. java 基础知识-数组的7种算法(排序、求和、最值、遍历...)

    遍历 遍历就是把这个数组的每个元素 显示出来 遍历的方法就是先定义这个数组的大小,然后用FOR循环来完成数组,例如 double[] score = new double[5]; Scanner in ...

  7. Java基础之数组类型

    对于Java,前面的一些基础概念不是很想写,看了看还是从数组开始写吧(毕竟数组是第一个引用类型,相对复杂一点),我也是学了JAVA不是很久,目前看完了JAVA的基础视频,还有JAVA疯狂讲义这本书的大 ...

  8. 黑马程序员——JAVA基础之数组

    ------- android培训.java培训.期待与您交流! ---------- 数组: 数组的定义: 数组是相同类型数据的集合, 描述的是相同类型的若干个数据按照一定的先后顺序排列组合而成,其 ...

  9. Java基础从数组到集合之间关键字的区别!!!!

    1.&& 和 &区别和联系: 相同点 : 结果是一样的.       不同点 :如果使用双&号判断,如果说条件一为false,不会判断条件二,但是单&号会继续判 ...

随机推荐

  1. 201521123079《java程序设计》第13周学习总结

    1. 本周学习总结 1.以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. (1)netassist可以用来链接IP端口 (2)accept方法可以用来监听端口,当没有客户端连接 ...

  2. 2017年AR大会上海站干货分享

    怀着即兴奋又激动的心情,踏上了第二次去上海的高铁,全长约1400公里行驶6小时15分钟,不算漫长的6个多小时里,对于不长出差的我来说,可谓是一种煎熬,再加上晕车的毛病,在去高铁的路上已经渐渐发作,但好 ...

  3. 关于学习Python的一些心得

    1.关注函数参数的类型,如列表,字符串,int,而不是关注函数的功能 2.导入模块numpy,dir(numpy) 查看所有属性 3.''.join(列表)  将列表拆成字符串

  4. mybatis-basedao的实现

    package com.yangwei.shop.dao; import java.util.HashMap; import java.util.List; import java.util.Map; ...

  5. SpringMVC的数据格式化-注解驱动的属性格式化

    一.什么是注解驱动的属性格式化? --在bean的属性中设置,SpringMVC处理 方法参数绑定数据.模型数据输出时自动通过注解应用格式化的功能. 二.注解类型 1.DateTimeFormat @ ...

  6. 【SQL】- 基础知识梳理(六) - 游标

    游标的概念 结果集,结果集就是select查询之后返回的所有行数据的集合. 游标(Cursor): 是处理数据的一种方法. 它可以定位到结果集中的某一行,对数据进行读写. 也可以移动游标定位到你需要的 ...

  7. 语音传输之RTP/RTCP/UDP及软件实现关键点

    语音通信是实时通信,一定要保证实时性,不然用户体验会很糟糕.IETF设计了RTP来承载语音等实时性要求很高的数据,同时设计了RTCP来保证服务质量(RTP不保证服务质量).在传输层,一般选用UDP而不 ...

  8. Go语言备忘录:基本数据结构

    本文内容是本人对Go语言的变量.常量.数组.切片.映射.结构体的备忘录,记录了关键的相关知识点,以供翻查. 文中如有错误的地方请大家指出,以免误导!转摘本文也请注明出处,多谢! 参考书籍<Go语 ...

  9. Redis学习——redis.conf 配置文件介绍

    学以致用 学在用前 参看文章: redis.conf 配置详解 Redis配置文件详解(redis.conf)-云栖社区 在Redis的使用过程,除了知道对Redis五种数据类型的操作方法之外,最主要 ...

  10. JavaScript案例开发之扑克游戏

    随着时代的发展,知识也在日益更新,但是基础知识永远不会过时,它是新时代的基石,更是我们进一步学习的保障,下面带着大家用JavaScript开发一款真正的扑克游戏,和大家一起分享,希望你们能够喜欢:闲话 ...