17-数组(概述-内存结构)

概念:同一种类型数据的集合,其实数组就是一个容器。

可以自动给数组中的元素从0开始编号,方便操作这些元素。

int[] x = new int[3];

01-数组(静态初始化-常见问题)

int[] arr = new int[]{3,1,6,5,4}; //静态初始化方式

简化形式: int[] arr = {3,1,6,5,4};

常见问题:

①ArrayIndexOutOfBoundsException  操作数组时,访问到了数组中不存在的角标。

②NullPointerException 空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。

02-数组(常见操作-遍历)

数组的操作:获取数据中的元素。通常会用到遍历。

length -- 数组中有一个属性可以直接获取到数组元素个数:

使用方式:数组名称.length

Eg:定义功能,用于打印数组中的元素。元素之间用逗号隔开。

    public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1) {
System.out.print(arr[i] + ",");
} else {
System.out.println(arr[i]);
}
}
}

03-数组(常见操作-获取最值)

Eg:给定一个数组{5,1,6,4,2,8,9} 1. 获取数组中的最大值以及最小值

package myFirstCode;

/*
* 给定一个数组{5,1,6,4,2,8,9} 1. 获取数组中的最大值以及最小值
*/
public class ArrayTest { /*
* 获取数组中最大值。
* 思路:
* 1. 获取最大值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。
* 通过一个变量进行临时存储。
* 2. 让数组中的每一个元素都和这个变量中的值进行比较。
* 如果大于了变量中的值,就用该变量记录最大值。
* 3. 当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值。
*
* 步骤:
* 1.定义变量。初始化为数组中任意一个元素即可。
* 2.通过循环语句对数组进行遍历。
* 3.在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量;
*
* 需要定义个功能来完成。一遍提高复用性。
* 1.明确结果,数组中的最大元素 int
* 2.未知内容:一个数组 int[]
*/ public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 5, 2, 6, 4, 9, 8, 1 };
System.out.println("最大值="+getMax(arr)); } public static int getMax(int[] arr) {
int tmp = arr[0], tmp1 = arr[0];
for (int i = 1; i < arr.length; i++) { if (arr[i] > tmp) {
tmp = arr[i];
}
if (arr[i] < tmp1) {
tmp1 = arr[i];
} }
return tmp;
// return tmp1;
} }

04-数组(排序-选择排序)

Eg:对给定数组进行排序。

选择排序:内循环结束一次,最值出现头角标位置上。

package myFirstCode;
/*
* 对给定数组进行排序。
* {5,1,6,4,2,8,9}
*/
public class ArrayTest2 { public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {5,1,6,4,2,8,9};
//排序前:
printArray(arr);
//排序
selectSort(arr);
//排序前:
printArray(arr);
} public static void printArray(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1) {
System.out.print(arr[i] + ",");
} else {
System.out.println(arr[i]+"]");
}
}
} //选择排序
public static void selectSort(int[] arr){ for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[i]<arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
} //冒泡排序
public static void bubbleSort(int[] arr)
{
for (int i = 0; i < arr.length-1; i++)
{
for (int j = 0; j < arr.length-i-1; j++) //-x:让每一次比较的元素减少,-1:避免角标越界。
{
if (arr[j]<arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp; }
}
}
}
}

05-数组(排序-冒泡排序)

冒泡排序:相邻的两个元素进行比较,如符合条件换位。第一圈:最值出现了最后位。

Eg:对给定数组进行排序。

    public static void swap(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}

***//Arrays.sort(arr); // java中已经定义好的一种排序方式,开发中,对数组排序,要使用此方法。***

package myFirstCode;
/*
* 对给定数组进行排序。
* {5,1,6,4,2,8,9}
*/
public class ArrayTest2 { public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {5,1,6,4,2,8,9};
//排序前:
printArray(arr);
//排序
selectSort(arr);
//排序前:
printArray(arr);
} public static void printArray(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1) {
System.out.print(arr[i] + ",");
} else {
System.out.println(arr[i]+"]");
}
}
} public static void selectSort(int[] arr){ for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[i]<arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
}

06-数组(排序-位置置换功能抽取)

任何排序,都需要对满足条件的元素进行位置置换,所以可以把这部分相同的代码提取出来,单独封装成一个函数。

Eg:

public static void swap(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}

07-数组(折半查找)

数组的查找

package myFirstCode;
/*
* 数组的查找
*/
public class ArrayTest4 { public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {3,1,5,4,2,9};
int index = getIndex(arr,2);
System.out.println("index="+index);
} //定义功能,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组中不存在。
public static int getIndex(int[] arr,int key)
{
for (int i = 0; i < arr.length; i++) {
if(arr[i]==key)
return i;
}
return -1;
} }

折半查找

package myFirstCode;

/*
* 数组的查找
*/
public class ArrayTest4 { public static void main(String[] args) {
// TODO Auto-generated method stub
// int[] arr = {3,1,5,4,2,9};
// int index = getIndex(arr,2);
int[] arr = { 1, 3, 5, 7, 9, 25, 33 };
int index = halfSearch(arr, 9);
System.out.println("index=" + index);
} /*
* 折半的第二种方式。
*/
public static int halfSearch2(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while (min<=max) {
mid = (max+min)>>1;// >>1 等于 /2
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
} /*
* 折半查找。提高效率,但是必须要保证数组是有序的数组。
*/
public static int halfSearch(int[] arr, int key) {
int min, mid, max;
min = 0;
max = arr.length - 1;
mid = (max + min) / 2;
while (arr[mid] != key) {
if (key > arr[mid])
min = mid + 1;
else if (key < arr[mid])
max = mid - 1;
if (min > max)
return -1;
mid = (max + min) / 2;
}
return mid;
} // 定义功能,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组中不存在。
public static int getIndex(int[] arr, int key) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == key)
return i;
}
return -1;
} }

练习,有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的。

    /*
* 练习,有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的。
*/
public static int getIndex_2(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while (min<=max) {
mid = (max+min)>>1;// >>1 等于 /2
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return min;
}

08-数组(十进制-二进制)

Eg:

public class ArrayTest5 {

    public static void main(String[] args) {
// TODO Auto-generated method stub
toBin(6);
} public static void toBin(int num)
{
StringBuffer sb = new StringBuffer();
while (num > 0)
{
sb.append(num%2);
num = num / 2;
}
System.out.println(sb.reverse()); }
}

09-数组(十进制-十六进制)

Eg:

package myFirstCode;

public class ArrayTest5 {

    public static void main(String[] args) {
// TODO Auto-generated method stub
toBin(6);
toHex(60);
} public static void toHex(int num)
{
StringBuffer sb = new StringBuffer();
for (int x = 0; x < 8; x++)
{
int temp = num & 15;
if(temp>9)
sb.append((char)(temp-10+'A'));
else
sb.append(temp); num = num >>>4;
}
System.out.println(sb.reverse());
} public static void toBin(int num)
{
StringBuffer sb = new StringBuffer();
while (num > 0)
{
sb.append(num%2);
num = num / 2;
}
System.out.println(sb.reverse()); }
}

10-数组(查表法十进制-十六进制)

11-数组(查表法十进制-二进制)

12-数组(进制转换优化)

13-数组(二维数组)

int[][] arr = new int[3][4]; //定义了名称为arr的二维数组。二维数组中有3个一维数组。

              //每一个一维数组中有四个元素。

package myFirstCode;

public class Array2Demo {

    public static void main(String[] args) {
// // TODO Auto-generated method stub
// //int[] arr = new int[3];//一维数组
// int[][] arr = new int[3][4];//定义了名称为arr的二维数组。二维数组中有3个一维数组。
// //每一个一维数组中有四个元素。
// System.out.println(arr[0]);
/*
int[][] arr = new int[3][]; arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2]; System.out.println(arr.length);
System.out.println(arr[2].length);
*/ int[][] arr = {{3,5,7,9},{2,3,4,6},{1,5,8,9}}; int sum = 0;
for (int x = 0; x < arr.length; x++) {
for (int y = 0; y < arr[x].length; y++) {
sum = sum + arr[x][y];
}
}
System.out.println("sum="+sum); } }

14-数组(二维数组练习)

一维数组--int[] x;int x[];

二维数组--int[][] y;int y[][];int[] y[];

int[] x,y[];  --等同于--  int[] x; int[] y[];

Java 学习 day04的更多相关文章

  1. Java学习day04

    day04-课堂笔记 1.运算符[剩下的运算符] * 赋值运算符 两种类型: 基本赋值运算符:= 扩展的赋值运算符: += -= *= /= %= 它们都是先执行等号右边的表达式,最后再经过运算赋值给 ...

  2. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  3. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  4. 分享篇——我的Java学习路线

    虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...

  5. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  6. Java学习心得之 HttpClient的GET和POST请求

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...

  7. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  8. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  9. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

随机推荐

  1. ConstraintLayout 约束布局

    约束布局ConstraintLayout 这种布局方式出现已经有一段时间了,刚出现的时候一直以为这种布局只是针对拖拽使用的布局,最近在新项目里看到了这种布局,又重新学习了这种布局,才发现以前真的是图样 ...

  2. ()centos6.8安装配置ftp服务器

    ftp传输原理 客户端通过某软件用某个端口(a端口)向服务端发起tcp连接请求,同时告诉服务端客户端另一个空闲端口号(b端口),服务端用21端口与客户端建立一条控制连接通道. 接着在默认情况下,服务端 ...

  3. dubbo框架的简单介绍

    以下的官网的介绍. dubbo是SOA.小例子是简单的远程调用(生产者消费者的模式出现).http://blog.csdn.net/huangyekan/article/details/4217267 ...

  4. POJ 2484 A Funny Game [博弈]

    题意:n枚硬币围成一个圈,每次每个人可以从中取走一枚或者相邻的两枚(如果两枚硬币原本中间隔着一枚硬币,后来被取走,这两枚硬币不算相邻).谁取走最后一枚硬币谁就赢了. 思路:我们可以找找规律. 首先,n ...

  5. JAVA基础之List接口

    个人理解: list接口是Collection接口的子类,其继承了Collection接口的所有方法,但也有其独有的方法,不过在迭代的时候不要进行任何操作.牢记数据存储的四种结构:堆栈.队列.数组.链 ...

  6. 我的CSS初始化,reset.css

    * { margin:; padding:; text-decoration: none; -webkit-overflow-scrolling: touch !important; /*iOS惯性滚 ...

  7. smartsvn学习(三) Error validating server certificate for

    Error validating server certificate for 'xxxxxxxxxxxx:443':  - The certificate is not issued by a tr ...

  8. [java面试]关于多态性的理解

    执行时多态性是面向对象程序设计代码重用的一个最强大机制.Java多态性的概念也能够被说成"一个接口.多个方法".Java实现执行时多态性的基础是动态方法调度,它是一种在执行时而不是 ...

  9. springBoot与多数据源的配置

    http://www.cnblogs.com/shenlanzhizun/p/5846475.html 最近有点忙,更新有点慢.今天进来说说一说springBoot中如何配置多数据源. 第一,新建一个 ...

  10. 如何使用优化代码段替代WordPress插件

    每一个WordPress网站,都可以通过使用插件来获得更多的功能.但是太多的插件,会拖慢站点的运行速度,并且让站点看上去臃肿不堪. 一些插件的功能让你舍不得卸载,但是其实你可以使用简单的PHP代码来替 ...