《Java从入门到精通》第五章学习笔记

第5章 数组

一、一维数组

1、创建

一维数组实质上是一组相同类型数据的集合,在Java中数组不属于数据类型,而是一种对象。 数组的两种声明方式:

int[] arr1;
int arr2[];

数组声明之后,在使用之前还需要先分配内存空间:

arr1=new int[3];  //数组元素个数为3,即长度为3;arr2=new int[2];

声明和分配空间也可以一并操作:

int arr1[]=new int[3];
int arr2[]=new int[2];

元素赋值的两种方法:

arr1[]=new int[]{1,2,3};
arr2[]={4,5};

 1 //找出一维数组中的最小值元素
 2 public class ArrayMinNum {
 3   public static void main(String[] args){
 4     int arr[]=new int[]{12,398,25,1024,414,1973,2,520,1013};
 5     int tempMin=arr[0];       //最小值暂存器,初始值为第一个元素值
 6     int markNumber=1;    //位置标识符
 7     for(int j=1;j<arr.length;j++){
 8         if(tempMin>arr[j]){
 9             tempMin=arr[j];
10             markNumber=j+1;
11         }
12     }
13     System.out.println("数组arr中最小值是"+tempMin+";是数组中第"+markNumber+"个元素");
14   }
15 }

二、二维数组
二维数组中各元素实际上是一维数组,创建、分配空间及赋值类似:

int arr[][];                    //声明创建
arr=new int[2][3]               //分配2*3个元素空间
arr={{1,2,3},{4,5,6}};              //赋值
int arrx[][]=new int[][]{{1,2},{3,4},{5,6}};  //创建+分配+赋值
 1 //对一个二维数组进行转置操作
 2 public class ArraySwap {
 3     public static void main(String[] args) {
 4         int arr1[][]=new int[][]{{1,2,3},{4,5,6},{7,8,9}};
 5         int arr2[][]=new int[3][3];
 6         for(int i=0;i<arr1.length;i++){
 7             for(int j=0;j<arr1[i].length;j++){
 8                 arr2[j][i]=arr1[i][j];
 9             }
10         }
11         for(int i=0;i<arr1.length;i++){
12             for(int j=0;j<arr1[i].length;j++){
13                 System.out.print(arr1[i][j]+"  ");
14             }
15             System.out.println("");
16         }
17         for(int i=0;i<arr2.length;i++){
18             for(int j=0;j<arr2[i].length;j++){
19                 System.out.print(arr2[i][j]+"  ");
20             }
21             System.out.println("");
22         }
23     }
24 }

三、数组的基本操作
1、通过for方法的遍历元素

//1、二维数组的元素遍历输出
public class ArrayTrap {
    public static void main(String[] args){
        int arr[][]=new int[][]{{1,3,5,7},{2,4,6},{0,10}};
        System.out.println("for循环常规方法:");
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                System.out.print(arr[i][j]+"  ");
            }
            System.out.println("");
        }
        System.out.println("foreach方法:");
        for(int arrx[]:arr){
            for(int a:arrx){
                System.out.print(a+"  ");
            }
            System.out.println("");
        }
    }
}

2、填充替换数组元素
(1)fill(int[] a,int value)方法:将value的值赋给数组a中每一个元素,该方法的返回值为更改后的数组a。
(2)fill(int[] a,int fromIndex,int toIndex,int value):将value的值赋给数组a中的元素,范围从索引为fromIndex的元素开始,到索引为toIndex的元素结束不包括该元素,该方法的返回值为更改后的数组a。

 1 //将数组中部分元素更改值
 2 import java.util.Arrays;
 3 public class ArrayDisplace {
 4     public static void main(String[] args){
 5         int arr[]=new int[]{13,8,9,520,14,4,24,27};
 6         System.out.println("填充前数组为:");
 7         for(int x:arr){
 8             System.out.print(x+" ");
 9         }
10         Arrays.fill(arr,1,4,520);
11         System.out.println("填充后数组为:");
12         for(int x:arr){
13             System.out.print(x+" ");
14         }
15     }
16 }

3、复制数组
(1)copyOf(arr,int newlength):arr是要进行复制的数组。newlength用于指定赋值后新数组的长度,如该长度大于arr长度,则其余用0填充(整型数组)或null(char型数组)。如果newlength小于arr长度,则按newlength截取。返回值为复制后的新数组。
(2)copyOfRange(arr,int fromIndex,int toIndex):复制范围从索引为fromIndex的元素开始,到索引为toIndex的元素结束不包括该元素,该方法的返回值为复制后的新数组。

四、实例

 1 //用冒泡法从小到大排序数组元素
 2 public class BubbleSortArray {
 3     public static void main(String[] args){
 4         int ourArray[]=new int[]{1973,10,1013,24,414,4,1980,520,13,19999};
 5         int temp;
 6         System.out.println("排序前:");
 7         for(int x:ourArray){
 8             System.out.print(x+" ");
 9         }
10         for(int i=1;i<ourArray.length;i++){
11             for(int j=0;j<ourArray.length-i;j++){
12                 if(ourArray[j]>ourArray[j+1]){
13                     temp=ourArray[j+1];
14                     ourArray[j+1]=ourArray[j];
15                     ourArray[j]=temp;
16                 }
17             }
18         }
19         System.out.println("排序后:");
20         for(int x:ourArray){
21             System.out.print(x+" ");
22         }
23     }
24 }
 1 //创建一个int型二维数组,求各元素之和并打印
 2 public class ArraySum {
 3     public static void main(String[] args){
 4         int arr[][]=new int[][]{{13,414,73},{10,24,80},{2012,10,13},{520,13,14}};
 5         int sum=0;
 6         for(int a[]:arr){
 7             for(int x:a){
 8                 sum+=x;
 9             }
10         }
11         System.out.println("二维数组arr各元素总和为"+sum);
12     }
13 }
时间: 2024-09-29 19:42:54

《Java从入门到精通》第五章学习笔记的相关文章

Linux内核设计与实现 第五章

1. 什么是系统调用 系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在意义: 1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,这样大大简化了用户程序的开发. 比如:用户程序通过write()系统调用就可以将数据写入文件,而不必关心文件是在磁盘上还是软盘上,或者其他存储上. 2)系统调用使得用户程序有更好的可移植性. 只要操作系统提供的系统调用接口相同,用户程序就可在不用修改的情况下,从一个系统迁移到另一个操作系统. 3)

linux及安全《Linux内核设计与实现》第一章——20135227黄晓妍

<linux内核设计与实现>第一章 第一章Linux内核简介: 1.3操作系统和内核简介 操作系统:系统包含了操作系统和所有运行在它之上的应用程序.操作系统是指整个在系统中负责完成最基本功能和系统管理的那些部分.这些部分包括内核.设备驱动程序.启动应到程序.命令行shell或者其他种类的用户界面.基本的文件管理系统工具. 内核:如果说用户界面是操作系统的外在表像,那么内核就是操作系统的内在核心. 内核空间:系统态和保护起来的内存空间. 内核的组成: 1.中断服务程序(响应中断) 2.调度程序(

《LINUX内核设计的艺术》第一章从开机家电到执行main函数之前的过程 学习笔记之一

从开机加电到实行main函数之前的过程 分为三步,目的是实现从启动盘加载操作系统程序,完成实现main函数的准备工作 启动BLOS,准备是模式下的中断向量表和中断服务程序 从启动盘加载操作系统程序到内存.加载操作系统程序就是靠第一步实现的 为实现32位的main函数做过度工作 1.1启动blos,准备实模式下的中断向量表和中断服务程序 由blos来加载软件操作系统的任务 1.1.1         BLOS的启动原理 0XFFFF0 由硬件来启动,CPU硬件设计逻辑设计为加电瞬间就强行将CS的值

《内核设计与实现》第一章读书笔记

<内核设计与实现>第一章读书笔记 第一章:Linux内核简介 1.1 Unix的历史 Unix强大的特点 A.简洁,几百个系统调用,明确的设计目的 B.文件对待所有东西 C.移植性强(C语言) D.进程创建快,使用fork()系统调用. E.进程间通信元语,进程间通信机制 1.2 linux的简介 Linux系统的基础是内核.C库.工具库和系统的基本工具. 1.3 操作系统和内核简介 内核:管理者,操作系统的核心 通常一个内核由负责响应中断的中断服务程序和网络.进程间通信等系统服务共同组成.

《Linux内核设计与实现》Chapter 5 读书笔记

<Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已有进程进行通信的机制 提供申请操作系统其他资源的能力 一.与内核通信 1.系统调用的作用 系统调用在用户空间进程和硬件设备之间添加了一个中间层,作用是: 为用户空间提供了一种硬件抽象接口: 系统调用保证了系统的稳定和安全,即可以避免应用程序不正确地使用硬件设备,窃取其他进程的资源: 每个进程都运行在虚拟系统中

《Linux内核设计与实现》Chapter 3 读书笔记

<Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象. 3.进程提供两种虚拟机制:虚拟处理器和虚拟内存. 4.内核调度的对象是线程,而不是进程. 二.进程描述符及任务结构 内核把进程的列表存放在叫做任务队列的双向循环链表中.链表中的每一项都是类型为task_struct的进程描述符结构,该结构定义在<linux/sched.h>文件中. 1.分配进

《Linux内核设计与实现》Chapter 2 读书笔记

<Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 更新分支到Linux的最新分支 $ git pull 可以获取并随时保持与内核官方的代码树一致 2.安装内核源代码 压缩形式为bzip2 $ tar xvjf linux-x.y.z.tar.bz2 压缩

《Linux内核设计与实现》第五章学习笔记

第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限的访问硬件设备,提供了新进程与已有进程进行通信的机制,也提供了申请操作系统其他资源的能力.提供接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 课堂知识点回顾 1. 系统调用:需要int 0x80模拟中断让硬件触发.同步.主动地进入系统空间. 2. 硬中断:异步.被动地进入系统空间.CPU运行时发生错误则中断,中断后没有进程调度. 3. 软中断:中断后还执行其他进程调度. 4. 系统调用过程:

《linux内核设计与实现》第二章

第二章 从内核出发 一.获取内核源码 1.使用Git(linux创造的系统) 使用git来获取最新提交到linux版本树的一个副本: $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 下载代码后,更新分支到Linux的最新分支: $ git pull 这两个命令可以获取并随时保持与内核官方的代码树一致. 2.安装内核源代码 压缩形式是bzip2,则运行: $ tar xvjf linu

Linux内核设计与实现 第十七章

1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 只能顺序访问(一个一个字符或者一个一个字节) 一般不挂载,直接和设备交互 网络设备 网卡 打破了Unix "所有东西都是文件" 的设计原则 通过套接字API来访问 除了以上3种典型的设备之外,还有"伪设备",即一些虚拟的设备,仅提供访问内核功能而已,没有物理设备与之关联