如何在java中声明和初始化数组?

2q5ifsrm  于 2021-06-30  发布在  Java
关注(0)|答案(26)|浏览(367)

如何在java中声明和初始化数组?

gzszwxb4

gzszwxb41#

数组是项的顺序列表

int item = value;

int [] one_dimensional_array = { value, value, value, .., value };

int [][] two_dimensional_array =
{
  { value, value, value, .. value },
  { value, value, value, .. value },
    ..     ..     ..        ..
  { value, value, value, .. value }
};

如果它是一个物体,那么它就是同一个概念

Object item = new Object();

Object [] one_dimensional_array = { new Object(), new Object(), .. new Object() };

Object [][] two_dimensional_array =
{
  { new Object(), new Object(), .. new Object() },
  { new Object(), new Object(), .. new Object() },
    ..            ..               ..
  { new Object(), new Object(), .. new Object() }
};

对于对象,需要将其指定给 null 使用 new Type(..) ,类,如 String 以及 Integer 特殊情况将按以下方式处理

String [] a = { "hello", "world" };
// is equivalent to
String [] a = { new String({'h','e','l','l','o'}), new String({'w','o','r','l','d'}) };

Integer [] b = { 1234, 5678 };
// is equivalent to
Integer [] b = { new Integer(1234), new Integer(5678) };

通常,您可以创建 M 维度的

int [][]..[] array =
//  ^ M times [] brackets

    {{..{
//  ^ M times { bracket

//            this is array[0][0]..[0]
//                         ^ M times [0]

    }}..}
//  ^ M times } bracket
;

值得注意的是 M 多维数组在空间上是昂贵的。从你创建一个 M 二维数组 N 在所有维度上,数组的总大小都大于 N^M ,因为每个数组都有一个引用,在m维上有一个(m-1)维的引用数组。总尺寸如下

Space = N^M + N^(M-1) + N^(M-2) + .. + N^0
//      ^                              ^ array reference
//      ^ actual data
8hhllhi2

8hhllhi22#

如果你说的“数组”是指 java.util.Arrays ,您可以这样做:

List<String> number = Arrays.asList("1", "2", "3");

Out: ["1", "2", "3"]

这个很简单,很直接。

j7dteeu8

j7dteeu83#

在java 9中

使用不同的 IntStream.iterate 以及 IntStream.takeWhile 方法:

int[] a = IntStream.iterate(10, x -> x <= 100, x -> x + 10).toArray();

Out: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

int[] b = IntStream.iterate(0, x -> x + 1).takeWhile(x -> x < 10).toArray();

Out: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

在java 10中

使用局部变量类型推断:

var letters = new String[]{"A", "B", "C"};
8ljdwjyq

8ljdwjyq4#

或者,

// Either method works
String arrayName[] = new String[10];
String[] arrayName = new String[10];

声明一个名为 arrayName 大小为10(可以使用元素0到9)。

vwkv1x7d

vwkv1x7d5#

Type[] variableName = new Type[capacity];

Type[] variableName = {comma-delimited values};

Type variableName[] = new Type[capacity]; 

Type variableName[] = {comma-delimited values};

也是有效的,但我更喜欢类型后面的括号,因为更容易看出变量的类型实际上是一个数组。

col17t5w

col17t5w6#

对于创建类对象数组,可以使用 java.util.ArrayList . 要定义数组,请执行以下操作:

public ArrayList<ClassName> arrayName;
arrayName = new ArrayList<ClassName>();

为数组赋值:

arrayName.add(new ClassName(class parameters go here);

从数组读取:

ClassName variableName = arrayName.get(index);

注: variableName 是对数组的引用,表示 variableName 将操纵 arrayName 对于循环:

//repeats for every value in the array
for (ClassName variableName : arrayName){
}
//Note that using this for loop prevents you from editing arrayName

允许您编辑的for循环 arrayName (常规for循环):

for (int i = 0; i < arrayName.size(); i++){
    //manipulate array here
}
njthzxwz

njthzxwz7#

另一个完整的例子是电影课:

public class A {

    public static void main(String[] args) {

        class Movie {

            String movieName;
            String genre;
            String movieType;
            String year;
            String ageRating;
            String rating;

            public Movie(String [] str)
            {
                this.movieName = str[0];
                this.genre = str[1];
                this.movieType = str[2];
                this.year = str[3];
                this.ageRating = str[4];
                this.rating = str[5];
            }
        }

        String [] movieDetailArr = {"Inception", "Thriller", "MovieType", "2010", "13+", "10/10"};

        Movie mv = new Movie(movieDetailArr);

        System.out.println("Movie Name: "+ mv.movieName);
        System.out.println("Movie genre: "+ mv.genre);
        System.out.println("Movie type: "+ mv.movieType);
        System.out.println("Movie year: "+ mv.year);
        System.out.println("Movie age : "+ mv.ageRating);
        System.out.println("Movie  rating: "+ mv.rating);
    }
}
ntjbwcob

ntjbwcob8#

声明对象引用数组:

class Animal {}

class Horse extends Animal {
    public static void main(String[] args) {

        /*
         * Array of Animal can hold Animal and Horse (all subtypes of Animal allowed)
         */
        Animal[] a1 = new Animal[10];
        a1[0] = new Animal();
        a1[1] = new Horse();

        /*
         * Array of Animal can hold Animal and Horse and all subtype of Horse
         */
        Animal[] a2 = new Horse[10];
        a2[0] = new Animal();
        a2[1] = new Horse();

        /*
         * Array of Horse can hold only Horse and its subtype (if any) and not
           allowed supertype of Horse nor other subtype of Animal.
         */
        Horse[] h1 = new Horse[10];
        h1[0] = new Animal(); // Not allowed
        h1[1] = new Horse();

        /*
         * This can not be declared.
         */
        Horse[] h2 = new Animal[10]; // Not allowed
    }
}
mwkjh3gx

mwkjh3gx9#

声明和初始化arraylist的另一种方法:

private List<String> list = new ArrayList<String>(){{
    add("e1");
    add("e2");
}};
iaqfqrcu

iaqfqrcu10#

有多种方法可以在java中声明数组:

float floatArray[]; // Initialize later
int[] integerArray = new int[10];
String[] array = new String[] {"a", "b"};

您可以在sun教程站点和javadoc中找到更多信息。

brgchamk

brgchamk11#

使用局部变量类型推断,只需指定一次类型:

var values = new int[] { 1, 2, 3 };

int[] values = { 1, 2, 3 }
0lvr5msh

0lvr5msh12#

声明数组: int[] arr; 初始化数组: int[] arr = new int[10]; 10表示数组中允许的元素数
声明多维数组: int[][] arr; 初始化多维数组: int[][] arr = new int[10][17]; 10行17列和170个元素,因为10乘以17等于170。

xqnpmsa8

xqnpmsa813#

我发现如果你理解每一部分,这会很有帮助:

Type[] name = new Type[5];
``` `Type[]` 是名为name的变量的类型(“name”称为标识符)。文字“type”是基类型,括号表示这是该基的数组类型。数组类型又是它们自己的类型,这使您可以像 `Type[][]` (类型[]的数组类型)。关键字 `new` 表示为新数组分配内存。括号之间的数字表示新数组的大小以及要分配的内存量。例如,如果java知道基类型 `Type` 需要32个字节,如果需要一个大小为5的数组,则需要在内部分配32*5=160字节。
您还可以使用已经存在的值创建数组,例如

int[] name = {1, 2, 3, 4, 5};

它不仅创建了空的空间,而且用这些值填充它。java可以判断原语是整数,并且有5个,因此数组的大小可以隐式地确定。
kxeu7u2r

kxeu7u2r14#

数组可以包含基元数据类型以及类的对象,具体取决于数组的定义。对于基本数据类型,实际值存储在连续的内存位置。对于类的对象,实际对象存储在堆段中。

一维数组:
一维数组声明的一般形式是

type var-name[];
OR
type[] var-name;

用java示例化数组

var-name = new type [size];

例如,

int intArray[];  // Declaring an array
intArray = new int[20];  // Allocating memory to the array

// The below line is equal to line1 + line2
int[] intArray = new int[20]; // Combining both statements in one
int[] intArray = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Accessing the elements of the specified array
for (int i = 0; i < intArray.length; i++)
    System.out.println("Element at index " + i + ": "+ intArray[i]);

参考:java中的数组

gxwragnw

gxwragnw15#

以基元类型为例 int 例如。有几种方法可以声明 int 数组:

int[] i = new int[capacity];
int[] i = new int[] {value1, value2, value3, etc};
int[] i = {value1, value2, value3, etc};

在所有这些地方,你可以使用 int i[] 而不是 int[] i .
通过反射,你可以使用 (Type[]) Array.newInstance(Type.class, capacity); 注意,在方法参数中, ... 表示 variable arguments . 基本上,任何数量的参数都是好的。用代码更容易解释:

public static void varargs(int fixed1, String fixed2, int... varargs) {...}
...
varargs(0, "", 100); // fixed1 = 0, fixed2 = "", varargs = {100}
varargs(0, "", 100, 200); // fixed1 = 0, fixed2 = "", varargs = {100, 200};

在方法内部, varargs 被视为正常人 int[] . Type... 只能用于方法参数,所以 int... i = new int[] {} 不会编译。
请注意,当通过 int[] 一种方法(或任何其他方法) Type[] ),您不能使用第三种方式。在声明中 int[] i = *{a, b, c, d, etc}* ,编译器假定 {...} 是指 int[] . 但那是因为你在声明一个变量。将数组传递给方法时,声明必须 new Type[capacity] 或者 new Type[] {...} .

多维数组

多维数组更难处理。从本质上讲,二维数组是数组的数组。 int[][] 表示一组 int[] s。关键是如果 int[][] 声明为 int[x][y] ,最大索引为 i[x-1][y-1] . 基本上,一个矩形 int[3][5] 是:

[0, 0] [1, 0] [2, 0]
[0, 1] [1, 1] [2, 1]
[0, 2] [1, 2] [2, 2]
[0, 3] [1, 3] [2, 3]
[0, 4] [1, 4] [2, 4]

相关问题