zoukankan      html  css  js  c++  java
  • Java基础总结--数组

    ---数组的定义---组织存储一组数据
    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的使用+框架的使用

  • 相关阅读:
    use paramiko to connect remote server and execute command
    protect golang source code
    adjust jedi vim to python2 and python3
    install vim plugin local file offline
    add swap file if you only have 1G RAM
    datatables hyperlink in td
    django rest framework custom json format
    【JAVA基础】网络编程
    【JAVA基础】多线程
    【JAVA基础】String类的概述和使用
  • 原文地址:https://www.cnblogs.com/sun1993/p/7500753.html
Copyright © 2011-2022 走看看