`
810364804
  • 浏览: 782729 次
文章分类
社区版块
存档分类
最新评论

Java_数组定义及常用方法

 
阅读更多

Java_数组定义及常用方法


摘要:


从数组的一些简单介绍、到定义、声明、初始化、以及常用的方法、细微的区别、但是没有讲多维数组、多维数组本质是一维数组的延伸、以后有时间补充、有补充或者误导的地方望不吝指正、不胜感激!

一:数组的简介


Java中的数组、是一种简单的线性数据存储结构、他用牺牲自动扩展大小来换取与集合相比的唯一优势——查询效率的提升。他本身是一种引用类型的数据、所以我们要使用数组就要首先声明、初始化他、而他的初始化的完成也就意味着此数组的大小将不再改变、而且具有初始值。当存储的是java原始基础类型时、默认值是不同基础类型值的默认值、当是引用类型时、如果我们没有指定具体的对象、则他的默认值是null。从数组的内部组成来看、觉得java中没有多维数组!所谓的多维数组其实就是一维数组的延伸、只是数组的值存放的是另一个数组的引用、依次深入、我们可以扩展到任意维度的数组、注意:数组的扩展的过程中只能存放相同类型或者子类型的数组!

Java中的数组长度不变!存储的数据类型唯一!有时候我们会有种错觉觉得这两者都是不成立的、本质是因为java中继承的存在、我们定义的父类型的数组、他的数组元素也同样可以存放子类对象、这样就造成了数组存放对象可变的假象。当我们将数组的引用从一个对象改变到子类的对象的时候、感觉数组的长度变化、其实变的是引用指向的对象的长度、原来引用指向的对象长度没有变化、只是此对象被遗弃了而已、

对此只要记住一点:java中的数组时引用类型、当声明初始化一个对象时、数组的引用存放在栈内、实际对象存放在堆内存中、而我们平常所指的长度、类型都是具体对象的长度、类型!

此外、Arrays是一个操作java数组的类、提供了一些非常实用的用于操作数组的类、还有就是java数组与集合比较相似。后面会有两者间的相互转换的方法。

二:简单归纳:


java中有两种数据类型:

a)引用类型

b)基础类型


其中基础类型又有两种:

b1)数值类型

b2)及布尔类型。


数组——也为java的一个数据类型、归类为引用类型。本文意图说清楚两点:

1、数组的声明以及初始化。

2、常用的数组方法。


补充一点:对于我们常说的二维数组、多维数组其实是一维数组的延伸、这里暂时只围绕一维数组。

三:数组的声明及初始化


1、数组的声明:


作为一种引用类型、就如我们平常使用引用类型的时候声明一样、一般有两种写法:


	a) type[] arrayName;	exp: String[] strArray;
	b) type	arrayName[];	exp: String strArray[];

第二种源于C的写法、由于很容易造成混淆、所以现在基本不使用这种声明方式了。

2、数组的初始化:


数组的初始化有两种:

a) 静态初始化——数组大小由系统分配、我们只为数组每个位置上赋值

		String[] strArray1 = {"a", "b", "c", "d", "e"};
		String[] strArray2 = new String[]{"a", "b", "c", "d", "e"};//在 new String[]中不能指定String数组的大小!

b)动态初始化——只指定数值的大小、初始化工作由系统为我们完成(即为数组的每个位置赋初始值)


		String[] strArray3 = new String[5];//此时String数组的每个位置上的值都由系统来初始化、使用默认的值""
		
		//我们能做的是动态的为strArray3每个位置上的值进行修改
		for (int i = 0; i < strArray1.length; i++) {
			//这里仅用原始的方法进行赋值。
			strArray3[i] = strArray1[i];
		}


四:数组的常用方法

package com.chy.array.usefulMethods;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import com.chy.array.bean.Student;

@SuppressWarnings("all")
public class ArrayUseFulMethoed {
	
	private static int[] intArray = {1, 2, 3, 4, 5};
	private static String[] strArray = {"a", "b", "c", "d", "e"};
	
	
	
	/**
	 * 填充元素、比较大小、复制元素
	 */
	public static void testFillArray(){
		//注意字符串和对象的不同
		Student[] student1 = new Student[4];
		Student[] student2 = new Student[4];
		System.out.println(Arrays.equals(student1, student2));//true
		
		Arrays.fill(student1, 0, 4, new Student(1,"chy"));
		Arrays.fill(student2, new Student(1,"chy"));
		System.out.println(Arrays.equals(student1, student2));//false
		
		
		String[] str1 = new String[4];
		String[] str2 = new String[]{"a", "a", "a", "a"};
		String[] str3 = {new String("a"), new String("a"), new String("a"), new String("a")};
		Arrays.fill(str1, "a");
		System.out.println(Arrays.equals(str1, str2));//true
		System.out.println(Arrays.equals(str2, str3));//true
		
		
		String[] str4 = Arrays.copyOf(str1, 2);//是将传入的数组拷贝len个元素到新的数组、相当于复制本身的一部分或者全部形成一个全新的数组
		System.out.println(str4.length + "=======" + Arrays.toString(str4));//	2=======[a, a]
		
		String[] str5 = new String[8];
		System.arraycopy(str4, 0, str5, 6, 2);//是将str4从下标0开的2个元素拷贝到从下标6开始放置的数组str5中
		System.out.println(str5.length + "=======" + Arrays.toString(str5));// 8=======[null, null, null, null, null, null, a, a]
		
		
	}
	
	
	/**
	 * 以字符串的形式输出指定数组的“模样”
	 */
	public static void printOriginalArray(){
		String intArrayToString = Arrays.toString(intArray);
		System.out.println(intArrayToString);	//result: [1, 2, 3, 4, 5]
	}
	
	/**
	 * 将数组转化成List集合
	 * 注意:不能直接将int[]转化为集合、因为asList()方法的参数必须是对象。应该先把int[]转化为Integer[]。
	 * 对于其他primitive类型的数组也是如此,必须先转换成相应的wrapper类型数组。	
	 */
	public static void convetArrayToList(){
		Integer[] integerArray = new Integer[intArray.length];
		for (int i = 0; i < integerArray.length; i++) {
			integerArray[i] = intArray[i];
		}
		ArrayList<Integer> integerList1 = new ArrayList<Integer>(Arrays.asList(integerArray));
		
		/*
		 * 不能写成下面:
		 * 		ArrayList<Integer> integerList2 = (ArrayList<Integer>)Arrays.asList(integerArray);
		 * 返回的是List<T>、强转可以通过编译、但是不能正常使用。
		 */
		for(int i : integerList1){
			System.out.print(i);
		}
		//result:	12345
		System.out.println();
		
	}
	
	/**
	 * 将List集合转换成数组
	 */
	public static void convetListToArray(){
		
		ArrayList<String> strList = new ArrayList<String>(Arrays.asList(strArray));
		String[] strArrayFromList = new String[strList.size()];
		strList.toArray(strArrayFromList);
		System.out.println(Arrays.toString(strArrayFromList));	//result:	[a, b, c, d, e]
		
		/*
		 * 注意:不能写成这样:String[] strArrayFromList = (String[])strList.toArray(strArrayFromList);会抛出ClassCastException。
		 *  List.toArray()与List.toArray(T[] t)的区别在于:
		 *  List.toArray()返回的是一个Object[]、不能强转成String[]、强转的话可以通过编译、但是不能进行String[]的操作
		 *  而List.toArray(T[] t)会将list的值转换成T类型的数组。
		 */
		
	}
	/**
	 * 将数组转换成Set集合
	 */
	public static void convertArrayToSet(){
		Set<String> set = new HashSet<String>(Arrays.asList(strArray));
		//Set具有无序性、所以输出结构不一定是原来数组元素存放顺序
		System.out.println(set);	//result: [d, e, b, c, a]
	}

	/**
	 * 判断某个数组中是否包含一个元素、思路:将数组转换成list使用list的contains方法
	 */
	public static void isContainObject(){
		ArrayList<String> strList = new ArrayList<String>(Arrays.asList(strArray));
		System.out.println(strList.contains("a"));	//result: true
		
		//另一种实现
		Arrays.sort(strArray);
		if(Arrays.binarySearch(strArray, "c") >= 0){
			System.out.println(true);
		}else{
			System.out.println(false);
		}
	}
	
	/**
	 * 将两个相同类型的数组连接起来 
	 */
	public static void connTwoSameArray(){
		int[] intArray2 = new int[]{6, 7, 8, 9, 10};
	}
	
	/**
	 * 将数组中数据排序
	 */
	public static void sortArray(){
		String[] str = {"c", "a" ,"d" ,"z" };
		Arrays.sort(str);
		System.out.println(Arrays.toString(str));
		
		//反序、
		Arrays.sort(str, Collections.reverseOrder());
		System.out.println(Arrays.toString(str));

	
		
	
	}
	
	
	public static void main(String[] args) {
		/*printOriginalArray();
		convetArrayToList();
		convetListToArray();
		isContainObject();
		convertArrayToSet();
		sortArray();*/
		testFillArray();
		
	}
}

分享到:
评论

相关推荐

    javascript中数组的多种定义方法和常用函数简介

    数组的定义:方法1. 代码如下:var mycars=new Array()mycars[0]=”sharejs.com”mycars[1]=”Volvo”mycars[2]=”BMW” 方法2.定义和初始化一起: 代码如下:var mycars=new Array(“Saab”,”Volvo”,”BMW”); 或者...

    Java基础复习day03数组

    数组 的定义,创建,访问,长度属性,遍历,常用Arrays类 二维数组,方法递归调用经典案例 变量源码教程

    Java开发详解.zip

    010401_【第4章:数组与方法】_数组的定义及使用笔记.pdf 010402_【第4章:数组与方法】_方法的声明及使用笔记.pdf 010403_【第4章:数组与方法】_数组的引用传递笔记.pdf 010404_【第4章:数组与方法】_Java新特性...

    Java开发技术大全(500个源代码).

    showMethod.java 演示如何定义一个方法体 showReturn_1.java return语句示例1 showReturn_2.java return语句示例2 showStaicVar.java 演示静态变量的使用 staticBlock.java 演示静态块的使用 staticVar.java ...

    java源码包2

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印  util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理...

    java实验常用的模版

    java实验常用的模版java实验常用的模版java实验常用的模版java实验常用的模版java实验常用的模版java实验常用的模版java实验常用的模版java实验常用的模版java实验常用的模版java实验常用的模版java实验常用的模版

    java源码包---java 源码 大量 实例

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印  util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、...

    【03-流程控制与数组】

    •Java语言支持两种语法格式来定义数组: –type[ ] arrayName; –type arrayName[ ]; •对于这两种语法格式,一般推荐使用第一种格式。因为第一种格式不仅具有更好的语意,也具有更好的可读性。 •数组是一种...

    javascript的数组和常用函数详解

    1.1 定义数组 声明有10个元素的数组: 代码如下:var a = new Array(10);此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] 来调用,例如 a[2] 但此时元素并未初始化,调用将返回 undefined。以下代码...

    JAVA语言中read方法分析

    InputStream类巾的read方法是最常用的输入方法。许多学生学习过 程中产生迷惑, 以及出现问题也是在使用read ‘法输入数据时发生 的。 如果要使用read方法输入数据,应使用“System.in.read()”的形式。 在这个...

    java技术学习文档.docx

    Java的变量和方法需要在类中定义,而不能在类外部定义。Java的代码块包括静态代码块、实例代码块和构造代码块,它们会在程序运行时被执行。Java中的异常处理机制可以帮助开发人员避免程序运行时出现的错误。 Java...

    java常用工具类的使用

    而Date的其他构造方法和普通方法的API都不容易实现国际化,因此目前Date类的大多数方法都被标识为过时,表示更灵活的时间类请参考java.util.Calendar。 Date的输出结果是按照国际通用格式输出的,而中国更习惯于...

    JAVA上百实例源码以及开源项目源代码

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印  util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、...

    java源码包4

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印  util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理...

    java 输入一个数字组成的数组(输出该数组的最大值和最小值)

    主要介绍了java 输入一个数字组成的数组,输出该数组的最大值和最小值,需要的朋友可以参考下

    JAVA上百实例源码以及开源项目

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印  util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、...

    java源码包3

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印  util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理...

    廖雪峰 Java 教程.doc

    廖雪峰 Java 教程 Java教程 Java快速入门 Java简介 安装JDK 第一个Java程序 Java代码助手 使用IDE 使用IDE练习插件 Java程序基础 Java程序基本结构 变量和数据类型 整数运算 浮点数运算 布尔运算 ...

    ,C++,JAVA初级学习.rar

    Arrays工具类提供了大量的静态方法,常用的方法如表2-7所示 import java.util.*; public class HelloWorld{ public static void main (String[] args){ int[] arr={9,8,3,5,2}; int[] copied=Arrays.copyOfRange...

    JAVA基础教程

    第 1 部分 Java基础程序设计 •Java语言介绍 •简单的 Java 程序 •Java 中的变量与数据类型 •运算符、表达式与语句 •循环与选择结构 •数组与方法的使用 --第 1 章 认识 Java ...附录 JAVA定义格式

Global site tag (gtag.js) - Google Analytics