`
韩悠悠
  • 浏览: 841913 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数组1

 
阅读更多

在java中,数组是一种效率最高的存储和随机访问对象引用序列的方式,数组就是一个简单的线性序列,这使得元素访问非常迅速,但是带来的代价是数组对象的大小被固定。并且在其生命周期中不可改变,当然可通过使用ArrayList,它可以通过创建一个新的实例,然后把旧实例复制中所有 的引用移到新实例中。,从而实现更多空间的自动分配,,但是这种弹性需要开销的,因此,ArrayList的效率比数组的效率低的多。

在泛型没有出现之前,其他的容器类在处理对象时,都将他们视作没有任何具体的类型,也就是说,它们都将这些对象当做java的根类Object 处理了,数组之所以优于泛型之前的容器,就是因为你可以创建一个数组去持有某种具体的类型,这意味着我们可以通过编译器检测,来防止插入错误类型和抽取不当的类型,

 

无论使用哪种类型的数组,数组标示付其实只是一个引用,指向其在堆中创建的一个真实对象,这个 数组对象用于保存指向其他对象的引用。

 

对象数组和基本类型数组在使用上几乎是相同的,唯一的区别就是对象数组保存的是引用,基本类型数组直接保存基本类型的值。

 

int[] a = new int[5];

a.length;

在这里,length是数组的大小,而不是实际保存的元素个数,新生产一个数组对象时,其中所有的引用被null,即可知道数组的某个位置是否存有对象。

 

 

数组和泛型

 

通常,数组和泛型不能很好的结合,不能实例化具有参数化类型的数组。

Peel<Banana>[] peels = new Peel<Banana>();   //错误

擦除会移除参数类型信息,而数组必须知道他们所持有的确切类型,以强制保证类型安全,虽然编译器不让我们实例化泛型数组,但是,它允许我们创建对这种数组的引用。如:

List<String>[] list;

但这又有什么用呢!

 

 

java标准类库Arrays有一个作用十分有限的fill()方法,只能用同一个值填充各个位置。例如:

 

 

public class FillArrays{

	public static void main(String[] args){

		boolean[] a1 = new boolean[6];
		int[] a2 = new int[6];
		String[] a3 = new String[6];
		Arrays.fill(a1,true);
		Arrays.fill(a2,16);
		Arrays.fill(a3,"hello");
		Arrays.fill(a3,3,5,"world");
		System.out.println(a1);
		System.out.println(a2);
		System.out.println(a3);
		
	}
}

输出:

a1=[true,true,true,true,true,true]

a2=[16,16,16,16,16,16]

a3=[hello,hello,hello,world,hello,world]

 

使用Arrays.fill()可以填充整个数组,或者只填充数组的某个区域,但是由于只能用单一的数值来调用Aarrays.fill()方法,因此所产生的结果并非特别有用。

 

一个基本的工具类

public class ConvertTo {
  public static boolean[] primitive(Boolean[] in) {
    boolean[] result = new boolean[in.length];
    for(int i = 0; i < in.length; i++)
      result[i] = in[i]; // Autounboxing
    return result;
  }
  public static char[] primitive(Character[] in) {
    char[] result = new char[in.length];
    for(int i = 0; i < in.length; i++)
      result[i] = in[i];
    return result;
  }
  public static byte[] primitive(Byte[] in) {
    byte[] result = new byte[in.length];
    for(int i = 0; i < in.length; i++)
      result[i] = in[i];
    return result;
  }
  public static short[] primitive(Short[] in) {
    short[] result = new short[in.length];
    for(int i = 0; i < in.length; i++)
      result[i] = in[i];
    return result;
  }
  public static int[] primitive(Integer[] in) {
    int[] result = new int[in.length];
    for(int i = 0; i < in.length; i++)
      result[i] = in[i];
    return result;
  }
  public static long[] primitive(Long[] in) {
    long[] result = new long[in.length];
    for(int i = 0; i < in.length; i++)
      result[i] = in[i];
    return result;
  }
  public static float[] primitive(Float[] in) {
    float[] result = new float[in.length];
    for(int i = 0; i < in.length; i++)
      result[i] = in[i];
    return result;
  }
  public static double[] primitive(Double[] in) {
    double[] result = new double[in.length];
    for(int i = 0; i < in.length; i++)
      result[i] = in[i];
    return result;
  }
} 

 

 

 

 

 

分享到:
评论

相关推荐

    树状数组1.c 使用C语言实现的

    树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c 使用C语言实现的树状数组1.c...

    PHP代码,需要数组1为1到36中随机选取5个数,需要数组2为1到12随机2个数,然后组合两个数组,然后输出数组1为红色,数组2

    然后,我们使用array_merge函数将这两个数组组合成一个新的数组,并使用foreach循环遍历数组,将数组1中的元素设置为红色,数组2中的元素设置为蓝色,并输出结果。 需要注意的是,我们使用了in_array函数来判断一个...

    实验4数组1.pdf

    实验 4 数组 1 本实验报告将对数组的基本概念、字符数组与字符串的使用方法、与数组相关的算法等进行探索,并通过编程实现数组元素的最大值和最小值的查找、字符串中满足条件的第一个字符的查找、矩阵中最大元素...

    最短无序连续子数组1

    题目 "最短无序连续子数组1" 是一道关于数组处理的问题,主要考察的是寻找数组中需要升序排序的最短连续子数组,以便整个数组变得有序。这是一道典型的算法题,通常出现在编程竞赛如 LeetCode 等平台。 在解决这个...

    《C语言学习笔记》数组1

    《C语言学习笔记》数组1主要讲解了一维数组和二维数组的概念、声明、初始化以及存储原理,以下是详细的知识点解析: 一维数组是C语言中基础的数据结构之一,它是一系列相同类型的数据元素的集合。在内存中,一维...

    day04-IDEA工具&数组1

    IDEA工具&数组1 IDEA是一款功能强大的集成开发环境(Integrated Development Environment),它提供了很多实用的功能来帮助开发者快速高效地编写、调试和维护代码。在本节中,我们将学习如何使用IDEA工具来开发Java...

    php_array数组1

    php数组1,这里是php技术中的数组部分的第一个png图像

    一维数组的使用-数组1

    一维数组的使用-数组1

    数组1.sdf

    数组1.sdf

    数组1.sln

    数组1.sln

    作业 数组1-1.cpp

    作业 数组1-1.cpp

    数组1 4.exe

    数组1 4.exe

    listview数据源为多维数组1

    listview数据源为多维数组1

    java-c语法8---数组的数组1---马克-to-win java视频

    java-c语法8---数组的数组1 java视频 马克java社区 马克towin

    C语言第07章-一维数组和二维数组1完整.pptx

    数组的定义格式为:类型说明符数组名[整常量表达式1][整常量表达式2],其中类型说明符表示数组元素的数据类型,数组名是数组的名称,整常量表达式1和整常量表达式2分别表示数组的行数和列数。 二维数组元素的引用:...

    ChengKeJ#ChengKeJ.github.io#2016-05-05-javascript入门笔记4-数组1

    1.数组 1.创建的新数组是空数组,没有值,如输出,则显示undefined 2.虽然创建数组时,指定了长度,但实际上数组都是变长的,也就是说即使指定了长度为8

    [Labview]用 for 循环产生 4 行 100 列二维数组,数组成员如下:....

    用 for 循环产生 4 行 100 列二维数组,数组成员如下: 1,2,3………100 100,99,98………..1 6,7,8………….105 105,104,103………6 从这个数组中提取出 2 行 50 列的二维数组,成员如下: 50,49,48……...

    java编程 java数组编程

    1. 编写一个程序打印数出有10个元素的浮点数组a1中最大值和最小值。 2.将有10个元素的数组a1 拷贝至含有15个元素的数组b1的一段位置。 3.将一个已存入数组中的值45,89,7,6,0,按0,6,7,89,45的次序打印...

    第7章数组1

    【数组概述】 数组是计算机编程中一种基础且重要的数据结构,它允许我们存储一组具有相同类型的数据。在C语言中,数组的声明形式通常为`[存储类型说明符] [类型修饰符] 类型说明符 数组名[常量表达式]={初值表}`。...

    Java数组编程 多个java编程

    1. 编写一个程序打印数出有10个元素的浮点数组a1中最大值和最小值。 2.将有10个元素的数组a1 拷贝至含有15个元素的数组b1的一段位置。 3.将一个已存入数组中的值45,89,7,6,0,按0,6,7,89,45的次序打印...

Global site tag (gtag.js) - Google Analytics