当前位置:文档之家› java数组复制的4种方式

java数组复制的4种方式

java数组复制的4种方式
java数组复制的4种方式

java数组复制的4种方式:

第一种方式利用for循环:

int[]a={1,2,4,6};

int length=a.length;

int[]b=new int[length];

for(int i=0;i

b[i]=a[i];

}

第二种方式直接赋值:

int[]array1={1,2,4,6};

int[]array2=a;

这里把array1数组的值复制给array2,如果你这样去运行,就会发现此时两个数组的值是一样的。这是传递的是引用(也就是地址),之后改变其中一个数组另一个也会跟着变化。

第三种方式:

利用Arrays自带的copyof

int copy[]=Arrays.copyOf(a, a.length);

第四种方式:

这里再介绍一下System.arraycopy这个函数,从JAVA API中找了一段。大家看一下。

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从src引用的源数组到dest 引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于length参数。源数组中位置在srcPos到srcPos+length-1之间的组件被分别复制到目标数组中的destPos到destPos+length-1位置。

如果参数src和dest引用相同的数组对象,则复制的执行过程就好像首先将srcPos到srcPos+length-1位置

的组件复制到一个带有length组件的临时数组,然后再将此临时数组的内容复制到目标数组的destPos到

destPos+length-1位置一样。

If 如果dest为null,则抛出NullPointerException异常。

如果src为null, 则抛出NullPointerException异常,并且不会修改目标数组。

否则,只要下列任何情况为真,则抛出ArrayStoreException异常并且不会修改目标数组:

src参数指的是非数组对象。

dest参数指的是非数组对象。

src参数和dest参数指的是那些其组件类型为不同基本类型的数组。src参数指的是具有基本组件类型的数组且dest参数指的是具有引用组件类型的数组。

src参数指的是具有引用组件类型的数组且dest参数指的是具有基本组件类型的数组。

否则,只要下列任何情况为真,则抛出IndexOutOfBoundsException异常,并且不会修改目标数组:

srcPos参数为负。

destPos参数为负。

length参数为负。

srcPos+length大于src.length,即源数组的长度。

destPos+length大于dest.length,即目标数组的长度。

否则,如果源数组中srcPos到srcPos+length-1位置上的实际组件通过分配转换并不能转换成目标数组的组

件类型,则抛出ArrayStoreException异常。在这种情况下,将k设置为比长度小的最小非负整数,这样就

无法将src[srcPos+k]转换为目标数组的组件类型;当抛出异常时,从srcPos到srcPos+k-1位置上的源数组

组件已经被复制到目标数组中的destPos到destPos+k-1位置,而目标数组中的其他位置不会被修改。(因

为已经详细说明过的那些限制,只能将此段落有效地应用于两个数组都有引用类型的组件类型的情况。)

参数:src- 源数组。

srcPos- 源数组中的起始位置。

dest- 目标数组。

destPos-

目标数据中的起始位置。

length-

要复制的数组元素的数量。

抛出:IndexOutOfBoundsException-

如果复制会导致对数组范围以外的数据的访问。ArrayStoreException- 如果因为类型不匹配而使得无法将src数组中的元素存储到dest数组中。

NullPointerException- 如果src或dest为null。

java中的数组和字符串

Java中的数组和字符串 一.数组:用一个标识符(变量名)和一组下标来代表一组相同数据类型的数据元素的集合.其中的每个数组元素在数组中的位置是固定的.可以通过叫做下标的编号加以区分,通过标识符和下标来访问每一个数据元素. 数组必须经过声明和初始化后,才可以使用. 1、数组的声明(确定数组名、数组的维数和数组的数据数据类型)但并没有分配存储空间 一维数组的声明格式如下: 类型标识符数组名[]; 或类型标识符[] 数组名; int x[]; //可读性强 int[] x;常用于作为方法的返回值 public int[] fun() { } 二维数组的声明格式如下: 类型标识符数组名[][]; 或类型标识符[][] 数组名; int x[][]; int[][] x; 类型说明符指明数组元素的类型,可以是基本类型、类或接口;方括号表示数组的维数. 注意:对于二维数组,前面的[]表示行,后面的[]表示列. 2、数组的初始化 声明数组并不能够为数组分配存储空间.要想使数组分配存储空间必须指定数组元素的个数. java有两种方式进行初始化: 1)通过指定初值的方式: 例如: int[] a={12,33,77,88}; int[][] a={{1,2,3},{4,5,6},{7,8,9}}; 2)用关键字new初始化数组: 用关键字new初始化数组时候,只为数组分配存储空间而不对数组元素赋初值. 用关键字初始化数组也有两种形式: (1)先声明数组,再初始化数组 一维:类型标识符数组名[]; 数组名=new 类型标识符[数组长度]; 二维:类型标识符数组名[][]; 数组名=new 类型标识符[数组长度][];//必须指定行的长度.跟c语言不同. 注意:对于二维数组来说,可以不指定列,但必须指定行数. 或 数组名=new 类型标识符[数组长度][数组长度];//数组长度是整型但不能是长整型 (2)声明并初始化 一维:类型标识符数组名[]=new 类型标识符[数组长度]; 二维:类型标识符数组名[][]=new 类型标识符[数组长度][];//如果没有给数组赋值的话,系统自动赋予默认值. (也就是说声明和初始化写在同一行) 3、数组的引用 一维数组的引用格式如下: 数组名[数组下标];

Java数组与Java基础类实验报告

西安邮电大学 (计算机学院) 课内实验报告 实验名称:数组与Java基础类 专业名称:计算机科学与技术 班级:计科1405班 学生姓名:高宏伟 学号:04141152 指导教师:刘霞林 实验日期:2016.10.27

一、实验目的 掌握Java中的数组定义、引用,掌握String类和StringBuffer类的使用。 二、实验要求 1.编写一个使用Java 数组的的程序。 2.编写一个使用String类的程序。 3.编写一个使用StringBuffer类的程序。 三、实验内容 (一) 使用数组求Fibonacci数列前10项之和 1.编写程序。 public class Fibonacci { public static void main(String args[]){ int i=0,j=1,s=0; for(int n=1;n<=5;n++){ s+=(i+j); i = (int)(i+j); j = (int)(i+j); } System.out.print("前10项之和是:"+s); } } 2.编译并运行程序。 (二)练习String类的常用方法 ?实验要求: 编写一个Java应用程序,判断两个字符串是否相同,判断字符串的前缀、后缀是否和某个字符串相同,按字典顺序比较两个字符串的大小关系,检索字符串,创 建字符串,将数字型字符串转换为数字,将字符串存放到数组中,用字符数组创建 字符串。。 ?程序模板: StringExample.java class StringExample { public static void main(String args[]) { String s1=new String("you are a student"),s2=new String("how are you"); if(【代码1】) // 使用equals方法判断s1与s2是否相同 { System.out.println("s1与s2相同"); }

JAVA类与对象及数组习题及答案

JAV A类和对象及数组习题 一、选择题 (1)下列构造方法的调用方式中,正确的是(D )--原因:在通过new实例化一个类对象时系统会自动调用该类相应的构造方法。 A.按照一般方法调用B.由用户直接调用 C.只能通过new自动调用D.被系统调用 (2)在Java中,能实现多重继承效果的方式是(C )--原因:一个类可以同时实现多个接口。Java接口反映了对象较高层次的抽象,还弥补了Java只支持单继承的不足,可用它来完成多继承的一些功能。 A.内部类B.适配器C.接口D.同步 (3)int型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是( D )—原因:java中定义常量用关键字final来定义。 A.public int MAX_LENGTH=100 B.final int MAX_LENGTH=100 C.public const int MAX_LENGTH=100 D.public final int MAX_LENGTH=100 (4)下列叙述中,正确的是( A )—原因:Java严格区分大小写,所以变量number 与Number不相同;Java 中的注释方式除了“//”行注释之外还有段注释“/*-------*/”和文档注释/**-------*/。Java源文件中的public类只能有一个。 A. 声明变量时必须指定一个类型 B. Java认为变量number与Number相同 C. Java中唯一的注释方式是"//" D. 源文件中public类可以有0或多个 (5)下列叙述中,错误的是( D )—原因:子类继承父类,并且可以有自己的成员变量和成员方法。所以可以认为子类是父类的扩展。

Java读取txt文件中指定行内容

获取文本内容与读取文本指定行数内容浅析(java) 在此项目中直接套用以前工程中获取文本内容的方法发现一直提示“数组下标越界”,通过分析和查找得出以下心得: 获取文本内容: private static final String CHART_PATH ="D://data3"; public static void main(String[] args) throws RowsExceededException,WriteException, BiffException{ try { readFileByLines(CHART_PATH+".txt"); } catch (IOException e) { // TODO: handle exception e.printStackTrace(); } } public static void readFileByLines(String fileName) throws IOException,RowsExceededException,WriteException{ //打开文件 WritableWorkbook book = Workbook.createWorkbook( new File(CHART_PATH+".xls")); WritableSheet sheet = book.createSheet("看我", 0); //读取txt文件内容 File file = new File(fileName); FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis,"GBK"); BufferedReader reader = null; try { reader = new BufferedReader(isr); String temString = null; //一次读入一行,以null结束 int i = 0; while((temString = reader.readLine())!= null){ System.out.println("+++++++"+temString); String[] str = temString.split(","); for(int j= 0;j

Java类 类型的数组创建与使用方法

Java类数组的使用方法一 注意一定要把类数组的每一个元素都赋值,否则就报错,既对类数组对象的一空声明,如果并没有实例化,会报空指针异常:NullPointerException 1.创建类类型的数组方法一: 创建一个Person类,在main方法中创建p1,p2,p3,p4 几个Person 类的实例化对象。然后再使用如下代码创建类类型的数组p。Product [] p=new Product[]{p1,p2,p3,p4}; public class Test { public static void main(String[] args) { Product p1=new Product(); https://www.doczj.com/doc/cd10148675.html,="豆浆机"; Product p2=new Product(); https://www.doczj.com/doc/cd10148675.html,="电视机"; Product p3=new Product(); Product p4=new Product(); Product [] p=new Product[]{p1,p2,p3,p4};//创建类类型的数组方法一 for(int i=0;i

} } class Product{ int Num; String name; } 2.创建类类型的数组方法二: public class Test { public static void main(String[] args) { Product p1=new Product(); Product p2=new Product(); Product p3=new Product(); Product p4=new Product(); Product [] p={p1,p2,p3};//创建类类型的数组方法二for(int i=0;i

Java读取Excel文件的几种方法

Java读取Excel文件的几种方法 最近单位有个项目需要读取excel文件的内容,特别对java读取excel文件的方法做了一点学习,也为了其他人以后能更简单地开发,少走弯路,特写此文,以下程序经过了我的测试,可以保证程序可用,如果你照搬都不行,可能是你的环境有问题。 读取excel文件的常用开源免费方法有以下几种: JDBC-ODBC Excel Driver jxl.jar jcom.jar poi.jar 下面分别对这几种方法分别进行探讨 1、JDBC-ODBC Excel Driver 这种方法是将excel看成是数据库进行操作,使用SQL Select语句即可 查询excel表格。优点是:不需要第三方的jar包。 如下表样 首先在控制面板进行数据源ODBC登记 具体方法如下:

下面就是代码了。 package xuzhe;

import java.io.*; import java.sql.*; //java xuzhe.ExcelJDBC public class ExcelJDBC { public static void main(String[] args) throws SQLException{ Connection con = null; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection( "jdbc:odbc:ExcelJDBC" ); Statement st = con.createStatement(); ResultSet rs = st.executeQuery( "Select * from [Sheet1$]" ); ResultSetMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); System.out.println ("表格列数"+numberOfColumns ); System.out.println( rsmd.getColumnName(1)+ "," + rsmd.getColumnName(2) + "," + rsmd.getColumnName(3)); while (rs.next()) { for (int i = 1; i <= numberOfColumns; i++) { if (i > 1) System.out.print(", "); String columnValue = rs.getString(i); System.out.print(columnValue); } System.out.println(""); } rs.close(); st.close(); } catch(Exception ex) { System.err.print("Exception: "); System.err.println(ex.getMessage()); } finally { con.close(); } } } 执行结果如下:

Java_数组练习题目

一填空题 1)数组的元素通过数组下标来访问,数组Array的长度为元素的个数 (Array.length)。 2)Java中数组的下标的数据类型是整形。 3)不用下标变量就可以访问数组的方法是数组名。 4)数组最小的下标是0 。 5)arraycopy()的最后一个参数指明复制元素的个数。 6)向方法传递数组参数时,传递的是数组的引用。 7)数组初始化包括数组的声明,创建,初始化。 8)数组下标访问超出索引范围时抛出数组越界异常 9)浮点型数组的默认值是0.0f 。 10)对象型数组的默认值是null 。 二选择题 1.下面错误的初始化语句是_A B D__ A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 2.定义了一维int型数组a[10]后,下面错误的引用是_B_ A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 3.下面的二维数组初始化语句中,正确的是__B__ A. float b[2][2]={0.1,0.2,0.3,0.4}; B. int a[][]={{1,2},{3,4}}; C. int a[2][]= {{1,2},{3,4}}; D. float a[2][2]={0}; 4.引用数组元素时,数组下标可以是__D__ A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为__C__ A. 24 B. 25 C. 18 D. 17 6.下列初始化字符数组的语句中,正确的是_B___ A. char str[5]="hello"; B. char str[]={'h','e','l','l','o','\0'}; C. char str[5]={"hi"}; D. char str[100]=""; 7.数组在Java中储存在 C 中 A. 栈 B. 队列 C. 堆 D. 链表

第四讲java数组和字符串

概述 什么是数组?除了基本数据类型,还提供一种导出类型:数组.数组是相同类型地数据按顺序组成地一种复合数据类型,通过数组名和下标,可以使用数组中地数据.下标从开始.数组是所有编程语言中常用地数据结构. 为什么要数组呢?我们来举一个例子.假设我们需要表示一个班个人地数学成绩,要求求出平均成绩.如果没有数组,我们需要用前面学过地声明变量地方法,声明个变量,写次加法运算!数组可以大大地简化类似地问题!我们只要声明一个长度为地整型数组,结合上一讲我们学过地循环语句,就可以很方便地解决这个问题! 在以前地编程语言比如或者中,字符串也使用数组来表示地:字符串是字符数组!所以字符串与数组有着天然地联系.但是在中,提供了一种更方便地表示字符串地方法:用一个类来表示.类是面向对象地语言特有地概念,对于初次接触面向对象技术地人来说,比较难理解.所以,这一讲,我们将学习表示字符串地类,也对类地使用有一个粗略地了解,作为下一讲详细学习类地准备. 需要指出地是,语言里地其他两种导出类型:结构体和共用体,在里已经被取消. 下面,我们来学习数组和字符串. 数组地声明、创建和初始化 数组地声明: 声明数组,包括声明数组地名字、数组包含地元素地数据类型.数组可以一维地,也可以是二维或者多维地.举例来说:一个班有个人,我们用一个长度为地一维数组表示;如果要表示每个同学地五门高考成绩,那我们就需要用一个第一维长度为,第二维长度为地二维数组. 声明一维数组有两种格式: 数组元素类型数组名[ ]; 数组元素类型[ ] 数组名; 比如:[ ]; 或者:[ ] ; 类似地,声明二维数组有两种格式: 数组元素类型数组名[ ][ ]; 数组元素类型[ ][ ] 数组名; 比如:[ ][ ]; 或者:[ ][ ] ; 下面,我们主要以一维数组为例,学习数组地用法. 数组地创建: 声明数组仅仅给出了数组名字和元素地数据类型,想要真正使用数组还必须为数组分配内存空间,也就是创建数组.在为数组分配内存空间时必须指明数组地长度.为数组分配内存空间地格式如下: 数组名数组元素地类型[ 数组地长度] 例如:[]; [] []; 事实上,数组地声明和创建可以一起完成,比如: [ ] []; 一旦数组被创建,数组地大小就不能改变.如果在程序运行期间,需要对数组地大小进行扩展,通常需要使用另一种数据对象:.有关向量和扩展数组,有兴趣地同学可以在帮助中查找地帮助.

java数组的概念和作用

1 数组的概念 和其他语言一样,Java也提供数组支持,数组是属于引用类型,即数组是一个 对象。 强调数组的类型是引用类型。 数组的基本概念及作用 数组是相同数据类型元素的集合 数组本身是引用数据类型,即对象。但是数组可以存储基本数据类型,也可以存储引用数据类型。 数组的举例 int [] a = new int []{1,2,3,4,5}; String [] s = new String []{"小熊","小小熊","小小小熊"}; Employee [] e=new Employee[10];(Employee是自定义类) 2 数组的声明 数组的声明的两种方式: 数据类型 [] 数组名字例如:int [] a; 数据类型数组的名字 [] 例如: int a []; 注意: 在Java语言中两种声明方法没有任何区别,但是建议大家用第一种,避免混淆a的数据类型。 数组在声明后还只是一个空指针,不能使用,要想使用必须创建。 数组创建的三种方式:

?//声明数组的同时,根据指定的长度分配内存,但数组中元素值都为默认的初始化值 char[] chAry = new char[10]; ?//声明数组并分配内存,同时将其初始化 ?int[] ary1 = new int[]{1, 2, 3, 4, 5}; ?//与前一种方式相同,仅仅只是语法相对简略 ?int[] ary2 = {1, 2, 3, 4, 5}; 从另一个角度,数组创建可以分为动态和静态两种 动态创建数组(没有为元素赋值,可以结合for循环进行赋值) char[] chAry = new char[10]; 静态创建数组,在创建的时候,即为每个元素赋初值 int[] ary1 = new int[]{1, 2, 3, 4, 5}; 数组的长度 数组的长度:length属性 int [] b1 = new int []{1,2,3,4,5,6,7}; System.out.println(b1.length); 注意:数组的长度是属性,String的长度是length(); 创建数组的时候必须指定数组的长度,而且一经定义则不允许改变。 数组的长度虽然是7,但是在内存中实际给8个位置,另外一个存储7. 数组之间赋值 在C语言中,不可以将数组直接赋值给另一个数组;

java文件读写代码

1、按字节读取文件内容 2、按字符读取文件内容 3、按行读取文件内容 4、随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); int tempbyte; while ((tempbyte = in.read()) != -1) { System.out.write(tempbyte); } in.close(); } catch (IOException e) { e.printStackTrace(); return; } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); // 一次读多个字节 byte[] tempbytes = new byte[100]; int byteread = 0; in = new FileInputStream(fileName); ReadFromFile.showAvailableBytes(in); // 读入多个字节到字节数组中,byteread为一次读入的字节数 while ((byteread = in.read(tempbytes)) != -1) { System.out.write(tempbytes, 0, byteread); }

实验三.数组与字符串

1.实验三数组与字符串 一、实验目的: 1.熟悉Java的数组的使用,编程练习数组声明、定义、遍历和排 序等操作。 2.熟悉Java的字符串相关类的使用,通过编程实现针对字符串的 一般操作。 二、实验内容: 1.定义一个有10个元素的整型数组,找出最大最小值; 2.定义一个有10个元素的整型数组,用选择法实现由小到大排序; 3.定义一个能实现冒泡法排序的方法bSort(int[] arr),然后定义并 初始化一4*5的二维数组,用bSort(int[] arr)将该二维数组的每 行元素进行升序排序; 4.编程求解一个3*3矩阵每一行的元素之和,每一列元素之和,对 角线元素之和,并输出。 5.接收键盘输入的字符串,使用String类的方法indexOf()来统 计该字符串中各个字符出现的次数。 6.设定并初始化一个字符串数组,并将数组中那些以字母b开头的 元素打印出来。 7.接收键盘输入的字符串,分别按顺序输出该字符串中的大写字符 和小写字符。 8.接收键盘输入的英文字符串(单词之间用空格隔开),将字符串 中出现的单词首字母改成大写后输出。 三、实验要求: 1.通过实验掌握数组的定义和初始化; 2.掌握数组最值求解算法; 3.掌握数组的基本排序算法; 4.掌握遍历数组的算法; 5.通过实验掌握String类的使用; 6.通过实验掌握String类常用方法的使用;

7.从JDK文档中查阅String类的以下方法(与本实验内容相关): split(),startWith(),toUpperCase(),indexOf(),charAt(),并说明 它们的用法; 8.写出实验报告。 四、实验学时:3学时 五、实验步骤: 1.进入Java编程环境; 2.新建一个Java文件,编写main()方法实现一维数组求最值的算 法; 3.新建一个Java文件,编写main()方法实现一维数组选择法排序 算法; 4.新建一个Java类,定义bSort(int[] arr)方法(冒泡法)实现数组 升序排序,然后在main方法里实现对一4*5二维数组每行元素 的升序排序; 5.新建一个Java文件,编写main()方法声明并初始化一两维3*3 数组,设计算法实现行、列和对角线元素的求和操作; 6.编写主方法main(),其中实现接收键盘输入功能、文件操作功能 和文件内容输出功能; 7.调用相应构造方法创建String对象; 8.查阅JDK文档,找出可以实现实验内容的String方法,设计算 法,编写程序; 9.调试运行程序,观察输出结果。

Java数组练习题(带答案)

一填空题 1)数组的元素通过下标来访问,数组Array的长度为Array.length 。 2)数组复制时,"="将一个数组的引用传递给另一个数组。 3)JVM将数组存储在栈(堆或栈)中。 4)数组的二分查找法运用的前提条件是数组已经排序。 5)Java中数组的下标的数据类型是整型。 6)数组最小的下标是0 。 7)arraycopy()的最后一个参数指明复制元素的个数。 8)向方法传递数组参数时,传递的是数组的引用。 9)数组初始化包括数组的申明,创建和初始化。 10)数组下标访问超出索引范围时抛出数组越界异常 11)浮点型数组的默认值是0.0f 。 12)数组创建后其大小不能改变。 二选择题 1.下面错误的初始化语句是_ABD__ A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 2.定义了一维int型数组a[10]后,下面错误的引用是_B__ A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 3.下面的二维数组初始化语句中,正确的是____ A. float b[2][2]={0.1,0.2,0.3,0.4}; B. int a[][]={{1,2},{3,4}}; C. int a[2][]= {{1,2},{3,4}}; D. float a[2][2]={0}; 4.引用数组元素时,数组下标可以是_D___ A. 整型常量 B. 整型变量 C. 整型表达式 D. 以上均可 5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为____ A. 24 B. 25 C. 18 D. 17 6.下列初始化字符数组的语句中,正确的是__B__ A. char str[5]="hello"; B. char str[]={'h','e','l','l','o','\0'}; C. char str[5]={"hi"}; D. char str[100]=""; 7.数组在Java中储存在 C 中 A. 栈 B. 队列 C. 堆 D. 链表 8.下面程序的运行结果是____ main() { int a[][]={{1,2,3},{4,5,6}}; System.out.printf("%d", a[1][1]); } A. 3 B. 4 C. 5 D. 6 9.下面程序的运行结果是_C___ main() {

Java数组与方法

若想要存放一连串相同数据类型的数据,使用数组是个相当好用的选择。此外,如果某个程序片段经常反复出现,那么将它定义成一个方法可以有效地简化程序代码。本章主要是介绍数组的基本用法与方法的应用,学完本章,将会对数组与方法的使用有更深一层的认识。 数组是由一组相同类型的变量所组成的数据类型,它属于引用类型。它们以一个共同的名称表示,数组中的每个元素则以下标来访问。数组依照存放元素的复杂程度分为一维数组、二维和多维数组,先来看看一维数组。 3.1 一维数组 一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的。可以将它简单的理解为是相同数据类型的数据的集合。 3.1.1 一维数组的声明与内存的分配 要使用Java的数组,必须经过两个步骤: (1)声明数组 (2)给数组分配内存 这两个步骤的语法如下: 数据类型数组名[ ]; 或数据类型[ ] 数组名; // 声明一维数组 数组名= new 数据类型[个数]; // 给数组分配内存 数组的声明格式里,“数据类型”是声明数组每个元素的数据类型,常见的类型有整型、浮点型与字符型等,也可以是引用类型。“数组名”是用来统一这组相同数据类型的元素的名称,其命名规则和变量的相同,建议使用有意义的名称为数组命名。数组声明后,接下来便是要配置数组所需的内存,其中“个数”是告诉编译器,所声明的数组要存放多少个元素,而“new”则是命令编译器根据括号里的个数,在内存中开辟一块内存供该数组使用。 需要注意的是,在Java中声明数组的时候,不能在[]中指定其长度。比如:int score[3]; // 错误 下面是关于一维数组的声明并分配内存给该数组的一个范例: int score[]; // 声明整型数组score score = new int[3]; // 为整型数组score分配内存空间,其元素个数为3 在上例中的第一行,当声明一个整型数组score时,score可视为数组类型的变量,此时这个变量并没有包含任何内容,编译器仅会分配一块内存给它,用来保存指向数组实体的地址,如图3-1所示。 图3-1 声明整型数组 声明之后,接着要做内存分配的操作,也就是上例中第二行语句。这一行会开辟3个可供保存整数的内存空间,并把此内存空间的参考地址赋给score变量。其内存分配的流程如图3-2所示。

java将对象保存到文件中从文件中读取对象

1.保存对象到文件中 Java语言只能将实现了Serializable接口的类的对象保存到文件中,利用如下方法即可: public static void writeObjectToFile(Object obj) { File file =new File("test.dat"); FileOutputStream out; try { out = new FileOutputStream(file); ObjectOutputStream objOut=new ObjectOutputStream(out); objOut.writeObject(obj); objOut.flush(); objOut.close(); System.out.println("write object success!"); } catch (IOException e) { System.out.println("write object failed"); e.printStackTrace(); } } 参数obj一定要实现Serializable接口,否则会抛出 java.io.NotSerializableException异常。另外,如果写入的对象是一个容器,例如List、Map,也要保证容器中的每个元素也都是实现了Serializable 接口。例如,如果按照如下方法声明一个Hashmap,并调用writeObjectToFile方法就会抛出异常。但是如果是 Hashmap就不会出问题,因为String类已经实现了Serializable接口。另外如果是自己创建的类,如果继承的基类没有实现Serializable,那么该类需要实现Serializable,否则也无法通过这种方法写入到文件中。 Object obj=new Object(); //failed,the object in map does not implement Serializable interface HashMap objMap=new HashMap(); objMap.put("test", obj); writeObjectToFile(objMap);

JAVA实验五 字符串和数组

实验五字符串和数组 【实验目的】 1.掌握数组的声明、分配空间及初始化 2.理解多维数组(重点掌握二维) 3.掌握String类的特点及常用方法的使用 4.掌握StringBuffer类的特点及常用方法的使用 5.掌握String类和StringBuffer类的区别 6.掌握equal方法与==的区别 【预习内容】 1.复习课件中理论知识 2.练习课堂所讲的例子 【实验内容及步骤】 1、请输入10个整数进行排序。 package com.shiyan5; import java.util.Scanner; public class ShiYan1 { /** * 1、请输入10个整数进行排序。 */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner s= new Scanner(System.in); int[] a=new int[10]; System.out.println("请输入10个整数"); for(int i=0;i<10;i++){ a[i]=s.nextInt(); } System.out.print("输入原序列为:"); for(int i=0;i<10;i++){ System.out.print(a[i]+" "); } for(int i=0;i<10;i++){ for(int j=i+1;j<10;j++){ if(a[i]>a[j]){ int t=a[i]; a[i]=a[j];

a[j]=t; } } } System.out.print("\n排序后:"); for(int i=0;i<10;i++){ System.out.print(a[i]+" "); } } } 2、定义一个10个元素组成的一维数组,输出该数组中的最大值、最小值、所有元素总和,以及最大值和最小值在该数组中的位置。 package com.shiyan5; import java.util.Scanner; public class ShiYan2 { /** * 定义一个10个元素组成的一维数组,输出该数组中的最大值、最小值、所有元素总和 * ,以及最大值和最小值在该数组中的位置。 */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner s=new Scanner(System.in); int[] a=new int[10]; System.out.println("请输入10个整数"); for(int i=0;i<10;i++){ a[i]=s.nextInt(); } int max=a[0]; int min=a[0]; int maxwz=0; int minwz=0; int sum=0; for(int j=0;jmax){ max=a[j]; maxwz=j+1; } if(a[j]

java中数组的学习完整版一

1.知识点 一维数组:定义、初始化、使用(相关的算法,常用系统类的使用) 多维数组:定义、初始化、使用 增强for循环,break、continue控制语句的学习 2.讲解 什么是数组? 例子 //要求把一个班的一门课的成绩,加起来求平均值; import java.util.*; class Average{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); float avg=0; float sum=0; int count=1; while(count<=3){ sum=sum+sc.nextFloat(); count++; } avg=sum/(count-1); System.out.println("平均值是:"+avg); System.out.println("程序结束"); } } //新要求:我要在输出平均值的同时,也要将这门课的最高分,最低分,同时也要能看到这门的成绩 数组概念:一组能够存储相同数据类型值的变量的集合。 在java中我们本着一切是对象的原则,我们把数组在java中看成是对象,数组对象。数组是最基本的引用型数据类型。 一维数组的知识点 定义方法: 1、三步法 A、int[] arr;用来申明数组的引用,在栈中为arr开辟内存; B、arr = new int[5];这是为数组arr在堆中为数组元素开辟6个存储单元; C、把数组在堆中的起始位置给了arr这个引用变量 *一般我们的程序在运行时,我们为局部变量在栈中开辟内存,而为对象(对象属性)在堆中开辟内存。为对象方法在方法区开辟内存空间。为类的属性,在静态区开辟内存空间。 具体的内存图:

Java中数组的声明

Java中数组的声明 一维数组的声明: 在Java中,数组是独立的对象,有自身的方法,不是变量的集合。 数组的声明: 类型标识符数组名[ ] 或者类型标识符[] 数组名。 数组的长度是在创建的时候决定的。 数组的创建方法: 先声明后创建: int array[]; array = new int[10]; 在声明的同时创建: int array[] = new int[10]; 直接赋值: int array[]= new int[1,2,3,4]; 数组下标从0开始。 数组是引用类型,他的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士地初始化。如: public class Testpublic static void main(Stirng [] args)?? int [] a = new int [5]; ?? Date[] days=new Date[3]; ?? System.out.println(a[3]); ?? System.out.println(days[2]);} class Dateint year,month,day; Date(int year,int month,int day)?? this.year=year; ?? this.month=month; ?? this.day=day;} 结果将是:0????? null 数组的拷贝 最有效率的方法是使用https://www.doczj.com/doc/cd10148675.html,ng.System类的静态方法: public static void arraycopy(object src,int srcPos,object dest, ???????????????? int destPos,int length) 可以用于数组src从第srcPos项元素开始的length个元素拷贝到目标数组从destPos项开始的length个位置。 如果源数据数目超过目标数组的边界,系统就会抛出异常。 二维数组 float[][] numthree;???????????? //定义一个float类型的2维数组 numthree=new float[5][5];?????? //为它分配5行5列的空间大小 numthree[0][0]=1.1f;??????????? //通过下标索引去访问???? 1行1列= 1.1 numthree[1][0]=1.2f;????????????????????????????????? // 2行1列=1.2 numthree[2][0]=1.3f;????????????????????????????????? // 3行1列=1.3 numthree[3][0]=1.4f;????????????????????????????????? // 4行1列=1.4

JAVA数组与List之间相互转换的方法详解

数组与List之间相互转换的方法详解 1.List转换成为数组。(这里的List是实体是ArrayList) 调用ArrayList的toArray方法。 toArray public T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组;返回数组的运行时类型就是指定数组的运行时类型。如果列表能放入指定的数组,则返回放入此列表元素的数组。否则,将根据指定数组的运行时类型和此列表的大小分配一个新的数组。 如果指定的数组能容纳列表并有剩余空间(即数组的元素比列表的多),那么会将数组中紧跟在集合末尾的元素设置为null。这对确定列表的长度很有用,但只在调用方知道列表中不包含任何null 元素时才有用。 指定者: 接口Collection 中的toArray 指定者: 接口List 中的toArray 覆盖: 类AbstractCollection 中的toArray 参数: a - 要存储列表元素的数组,如果它足够大的话;否则,它是一个为存储列表元素而分配的、具有相同运行时类型的新数组。 返回: 包含列表元素的数组。 抛出: ArrayStoreException - 如果a 的运行时类型不是此列表中每个元素的运行时类型的超类型。 具体用法: 复制代码代码如下: List list = new ArrayList(); list.add("1");

list.add("2"); finalint size = list.size(); String[] arr = (String[])list.toArray(new String[size]); 2.数组转换成为List 调用Arrays的asList方法. JDK 1.4对java.util.Arrays.asList的定义,函数参数是Object[]。所以,在1.4中asList()并不支持基本类型的数组作参数。 JDK 1.5中,java.util.Arrays.asList的定义,函数参数是Varargs, 采用了泛型实现。同时由于autoboxing 的支持,使得可以支持对象数组以及基本类型数组。 不过在使用时,当传入基本数据类型的数组时,会出现小问题,会把传入的数组整个当作返回的List中的第一个元素,例如: 复制代码代码如下: public static void main(String[] args){ int[] a1 = new int[]{1,2,3}; String[] a2 = new String[]{"a","b","c"}; System.out.println(Arrays.asList(a1)); System.out.println(Arrays.asList(a2)); } 1.打印结果如下: 复制代码代码如下: 1 2 [[I@dc8569] [a, b, c] 下面说说Arrays.asList()的返回值: JDK文档是这么说的: public static ListasList(T... a) 返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同Collection.toArray() 一起,充当了基于数组的API 与基于collection 的API 之间的桥梁。返回的列表是可序列化的,并且实现了RandomAccess。此方法还提供了一个创建固定长度的列表的便捷方法,该列 复制代码代码如下:

相关主题
文本预览
相关文档 最新文档