1,数组和其他种类的类的容器之间的区别有三个方面:效率,类型和保存基本类型的能力。
数组可以持有基本的类型,而泛型之前的容器则不能。但是有了泛型,容器就可以指定并检查它们所持有的对象的类型,
并且有了自动包装机制,容器看起来还能持有基本类型。
2,数组标示符其实只是一个引用,指向在堆中创建的一个真实的对象,这个数组对象用来保存指向其他对象定的引用。
对象数组和基本类型数组在使用上基本是相同的;唯一的区别就是对象数组保存的是引用,基本类型数组直接保存基本类型
的值。
public class ArrayOptions {
public static void main(String[] args) {
// Arrays of objects:
BerylliumSphere[] a; // Local uninitialized variable
BerylliumSphere[] b = new BerylliumSphere[5];
// The references inside the array are
// automatically initialized to null:
print("b: " + Arrays.toString(b));
BerylliumSphere[] c = new BerylliumSphere[4];
for(int i = 0; i < c.length; i++)
if(c[i] == null) // Can test for null reference
c[i] = new BerylliumSphere();
// Aggregate initialization:
BerylliumSphere[] d = { new BerylliumSphere(),
new BerylliumSphere(), new BerylliumSphere()
};
// Dynamic aggregate initialization:
a = new BerylliumSphere[]{
new BerylliumSphere(), new BerylliumSphere(),
};
// (Trailing comma is optional in both cases)
print("a.length = " + a.length);
print("b.length = " + b.length);
print("c.length = " + c.length);
print("d.length = " + d.length);
a = d;
print("a.length = " + a.length);
// Arrays of primitives:
int[] e; // Null reference
int[] f = new int[5];
// The primitives inside the array are
// automatically initialized to zero:
print("f: " + Arrays.toString(f));
int[] g = new int[4];
for(int i = 0; i < g.length; i++)
g[i] = i*i;
int[] h = { 11, 47, 93 };
// Compile error: variable e not initialized:
//!print("e.length = " + e.length);
print("f.length = " + f.length);
print("g.length = " + g.length);
print("h.length = " + h.length);
e = h;
print("e.length = " + e.length);
e = new int[]{ 1, 2 };
print("e.length = " + e.length);
}
} /* Output:
3,多维数组
public class MultiDimWrapperArray {
public static void main(String[] args) {
Integer[][] a1 = { // Autoboxing
{ 1, 2, 3, },
{ 4, 5, 6, },
};
Double[][][] a2 = { // Autoboxing
{ { 1.1, 2.2 }, { 3.3, 4.4 } },
{ { 5.5, 6.6 }, { 7.7, 8.8 } },
{ { 9.9, 1.2 }, { 2.3, 3.4 } },
};
String[][] a3 = {
{ "The", "Quick", "Sly", "Fox" },
{ "Jumped", "Over" },
{ "The", "Lazy", "Brown", "Dog", "and", "friend" },
};
System.out.println("a1: " + Arrays.deepToString(a1));
System.out.println("a2: " + Arrays.deepToString(a2));
System.out.println("a3: " + Arrays.deepToString(a3));
}
} /* Output:
Array.deepToString()对基本类型数组和对象数组都起作用。
4,Array.fill()
public class FillingArrays {
public static void main(String[] args) {
int size = 6;
boolean[] a1 = new boolean[size];
byte[] a2 = new byte[size];
char[] a3 = new char[size];
short[] a4 = new short[size];
int[] a5 = new int[size];
long[] a6 = new long[size];
float[] a7 = new float[size];
double[] a8 = new double[size];
String[] a9 = new String[size];
Arrays.fill(a1, true);
print("a1 = " + Arrays.toString(a1));
Arrays.fill(a2, (byte)11);
print("a2 = " + Arrays.toString(a2));
Arrays.fill(a3, 'x');
print("a3 = " + Arrays.toString(a3));
Arrays.fill(a4, (short)17);
print("a4 = " + Arrays.toString(a4));
Arrays.fill(a5, 19);
print("a5 = " + Arrays.toString(a5));
Arrays.fill(a6, 23);
print("a6 = " + Arrays.toString(a6));
Arrays.fill(a7, 29);
print("a7 = " + Arrays.toString(a7));
Arrays.fill(a8, 47);
print("a8 = " + Arrays.toString(a8));
Arrays.fill(a9, "Hello");
print("a9 = " + Arrays.toString(a9));
// Manipulating ranges:
Arrays.fill(a9, 3, 5, "World");
print("a9 = " + Arrays.toString(a9));
}
} /* Output:
5,Arrays实用功能
复制数组System.arraycoppy();
public class CopyingArrays {
public static void main(String[] args) {
int[] i = new int[7];
int[] j = new int[10];
Arrays.fill(i, 47);
Arrays.fill(j, 99);
print("i = " + Arrays.toString(i));
print("j = " + Arrays.toString(j));
System.arraycopy(i, 0, j, 0, i.length);
print("j = " + Arrays.toString(j));
int[] k = new int[5];
Arrays.fill(k, 103);
System.arraycopy(i, 0, k, 0, k.length);
print("k = " + Arrays.toString(k));
Arrays.fill(k, 103);
System.arraycopy(k, 0, i, 0, k.length);
print("i = " + Arrays.toString(i));
// Objects:
Integer[] u = new Integer[10];
Integer[] v = new Integer[5];
Arrays.fill(u, new Integer(47));
Arrays.fill(v, new Integer(99));
print("u = " + Arrays.toString(u));
print("v = " + Arrays.toString(v));
System.arraycopy(v, 0, u, u.length/2, v.length);
print("u = " + Arrays.toString(u));
}
} /* Output:
数组的比较
Arrays.equals()
public class ComparingArrays {
public static void main(String[] args) {
int[] a1 = new int[10];
int[] a2 = new int[10];
Arrays.fill(a1, 47);
Arrays.fill(a2, 47);
print(Arrays.equals(a1, a2));
a2[3] = 11;
print(Arrays.equals(a1, a2));
String[] s1 = new String[4];
Arrays.fill(s1, "Hi");
String[] s2 = { new String("Hi"), new String("Hi"),
new String("Hi"), new String("Hi") };
print(Arrays.equals(s1, s2));
}
} /* Output:
数组元素的比较
java有两种方式来提供比较功能。第一种是实现java.lang.Comparable接口,使得你的类具有天生的“比较”能力。
此接口很简单,只有compareTo()一个方法。此方法接受另一个Object为参数,如果当前对象小于参数则返回负值。
如果相等则返回零,如果当前对象大于参数则返回正值。
public class CompType implements Comparable<CompType> {
int i;
int j;
private static int count = 1;
public CompType(int n1, int n2) {
i = n1;
j = n2;
}
public String toString() {
String result = "[i = " + i + ", j = " + j + "]";
if(count++ % 3 == 0)
result += "\n";
return result;
}
public int compareTo(CompType rv) {
return (i < rv.i ? -1 : (i == rv.i ? 0 : 1));
}
private static Random r = new Random(47);
public static Generator<CompType> generator() {
return new Generator<CompType>() {
public CompType next() {
return new CompType(r.nextInt(100),r.nextInt(100));
}
};
}
public static void main(String[] args) {
CompType[] a =
Generated.array(new CompType[12], generator());
print("before sorting:");
print(Arrays.toString(a));
Arrays.sort(a);
print("after sorting:");
print(Arrays.toString(a));
}
} /* Output:
数组排序
使用内置的排序方法,就可以对任意的基本类型数组排序;也可以对任意对象数组进行排序,只有该对象实现了
Comparable接口或者相关联的Comparator。
public class StringSorting {
public static void main(String[] args) {
String[] sa = Generated.array(new String[20],
new RandomGenerator.String(5));
print("Before sort: " + Arrays.toString(sa));
Arrays.sort(sa);
print("After sort: " + Arrays.toString(sa));
Arrays.sort(sa, Collections.reverseOrder());
print("Reverse sort: " + Arrays.toString(sa));
Arrays.sort(sa, String.CASE_INSENSITIVE_ORDER);
print("Case-insensitive sort: " + Arrays.toString(sa));
}
} /* Output:
在已排序的数组中查找
如果已经排好序了,就可以使用Arrays.binarySearch()执行快速查找。如果要对未排队的数组使用binarySearch(),
那将产生不可预料的结果。
public class ArraySearching {
public static void main(String[] args) {
Generator<Integer> gen =
new RandomGenerator.Integer(1000);
int[] a = ConvertTo.primitive(
Generated.array(new Integer[25], gen));
Arrays.sort(a);
print("Sorted array: " + Arrays.toString(a));
while(true) {
int r = gen.next();
int location = Arrays.binarySearch(a, r);
if(location >= 0) {
print("Location of " + r + " is " + location +
", a[" + location + "] = " + a[location]);
break; // Out of while loop
}
}
}
} /* Output:
如果找到目标,Arrays.binarySearch()产生的返回值等于或大于0,。否则,它产生负返回值,表示如要保持数组的排序
状态次目标元素所应该插入的位置。这个负值的计算方式是:
-(插入点)-1
插入点值第一个大于查找对象的元素在数组中的位置,如果数组中所有的元素都小于要查找的对象。"插入点"就等于
a.size().
public class AlphabeticSearch {
public static void main(String[] args) {
String[] sa = Generated.array(new String[30],
new RandomGenerator.String(5));
Arrays.sort(sa, String.CASE_INSENSITIVE_ORDER);
System.out.println(Arrays.toString(sa));
int index = Arrays.binarySearch(sa, sa[10],
String.CASE_INSENSITIVE_ORDER);
System.out.println("Index: "+ index + "\n"+ sa[index]);
}
} /* Output:
分享到:
相关推荐
在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...
<br><br>此为第三版Java Study Note Rev.3 (080603)<br><br>1).增加了学习笔记下半部。<br><br>在转换的过程中可能存在其他失误,请见谅,如果有好的见解请登陆我的博客:<br><br>...
JAVA学习笔记是面向对象编程语言的学习笔记,涵盖了JAVA的基本概念、面向对象编程思想、类和对象的概念、实例变量和局部变量的区别、方法的定义和调用、类型转换、精度问题、移位问题、switch语句的使用等内容。...
1 应用Struts的网站建设 <br><br> <br> <br>Java基础<br> 1 20个Java基础Tips <br> 2 abstract,static,final修饰符 <br> 3 ChinaUnix.net Java精华贴 <br> 4 ANT学习笔记 <br> 5 极度性能调整 <br><br> <br>FAQs<br>...
<br>ext学习笔记一<br>小试iBatis<br>RIA(Rich Internet Application)的现状和未来<br>Java应用中域名解析不过期的解决方法<br>Java编程那些事儿45—数组使用示例1<br>一步步熟悉OFBiz<br>用Java做客户端调用.NET写...
java编程思想笔记,建议与书本结合使用。。。。。。。。。。。
- `<c:forEach>`:循环遍历集合或数组。 - `<c:url>`和`<c:param>`:创建和添加URL参数。 - `<c:redirect>`和`<c:forward>`:页面重定向和请求转发。 3. **EL(Expression Language)**:JSTL与EL结合使用,可以...
java编程思想的笔记。是别人的学习笔记。
### Java编程思想读书笔记知识点梳理 #### 第1、2章:万事万物皆对象 ##### 一、所有对象都必须由你建立 - **存储位置**: - **寄存器**:程序中不可控。 - **栈 (Stack)**:存放基本类型数据和对象引用,对象...
Java编程思想笔记 本笔记涵盖了Java编程思想的多个方面,包括访问权限控制、封装、继承、多态、接口、内部类、持有对象等。 访问权限控制 访问权限控制是为了把变动的事物与保持不变的事物区分开来。Java中有四种...
### Java 数组学习笔记 #### 一、Java 数组概述 **数组定义**: 数组是一种基本的数据结构,用于存储固定数量的同类型元素。在 Java 中,数组是一种对象,具有以下特点: - **数据类型一致**:数组中的所有元素...
在这个暑假培训学习笔记中,我们将深入理解Java数组的各个方面,包括定义、初始化、操作以及数组的高级特性。 1. **数组的定义** 在Java中,数组是对象,它包含了相同类型的变量集合。数组的类型必须在声明时指定...
《Java编程思想读书笔记》 Java是一门面向对象的编程语言,它的核心理念是“万事万物皆对象”。在Java中,所有的对象都是通过类(Class)来定义的,并且必须由程序员显式创建。理解对象的存储位置是理解Java内存...
第十六章讲述了Java中的数组。数组是一种存储相同类型元素的集合。本章介绍了如何声明和初始化数组、如何遍历数组以及如何使用Arrays工具类来进行排序和搜索等操作。此外,还会讨论二维数组和多维数组的应用场景。 ...
### 数组和集合的学习笔记 #### 一、概述 在Java编程语言中,数组和集合是数据存储与操作的重要组成部分。数组是一种基本的数据结构,用于存储相同类型的数据元素;而集合(Collections)则是用于存储、检索和操作...