ArrayList适用于通过为位置来读取元素的场景; LinkedList 适用于要头尾操作或插入指定位置的场景; Vector 适用于要线程安全的ArrayList的场景; Stack 适用于线程安全的LIFO场景; HashSet 适用于对排序没有要求的非重复元素的存放; TreeSet 适用于要排序的非重复元素的存放; HashMap 适用于大部分key-value的存取场景; TreeMap 适用于需排序存放的key-value场景。
这个似乎不是楼主想要的吧
1. 静态地定义一个二维数组对象:
int[][] arr = { {1,2,3},
{4,5,6} };
2. 动态地定义一个二维数组的引用:
int[][] arr = new int[2][]; //int[2][]中的"2"表示数组的维度,不可少
arr[0] = new int[3]; //数组第一行定义3个元素
arr[1] = new int[5]; //数组第二行定义5个元素
3. 赋值运算符"="用于基本数据类型时将值复制给变量,但当它用于对象时,则是将对象指定给引用名称来引用,而不是将对象进行复制。
可以将同一个对象指定给多个引用名称,当由其中的一个引用名称对对象进行操作而变更时,其余引用名称所引用到的值也会变动。
例如以以下一段实验代码加以体会:
public class AdvancedArray{
public static void main(String[] args){
int[] arr1 = {1,2,3,4,5};
int[] tmp1 = arr1;
int[] tmp2 = arr1;
System.out.print("get data from tmp1: ");
for(int i=0; i<tmp1.length; i++)
System.out.print(tmp1[i]+" ");
System.out.print("get data from tmp2: ");
for(int i=0; i<tmp2.length; i++)
System.out.print(tmp2[i]+" ");
tmp1[2]=9;
System.out.print("/n/nGet data from tmp1: ");
for(int i=0; i<tmp1.length; i++)
System.out.print(tmp1[i]+" ");
System.out.print("/n/nGet data from tmp2: ");
for(int i=0; i<tmp1.length; i++)
System.out.print(tmp2[i]+" ");
System.out.println();
}
}
通过这个例子,不难对Java中数组对象和其引用之间的关系有所体会。
4. 复制数组
# 可以使用System.arrycopy(源数组,起始索引,目的数组,起始索引,复制长度) 的方法。
# JDK6.0中新增了copyOf(源数组,复制长度)的方法,复制长度是新建数组对象的长度,若它的值超过了源数组长度,那么多余的元素保留为默认值。
例如:
import java.util.Arrys;
...
int[] arr1 = {1,2,3,4,5};
int[] arr2 = Arrays.copyOf(arr1,arr1.length);
# 用copyOfRange()指定源数组和复制范围,例如:
int[] arr1 = {1,2,3,4,5,6,7,8,9};
int[] arr2 = Arrays.copyOfRange(arr1, 1, 6); //复制arr1索引号从1到6(不包括6)的元素
结果arr2为{2,3,4,5,6}
5. Arrays.deepEquals(数组1,数组2): 可以比较多维的数组是否相等。
Arrays.deepToString(数组名): 可以以字符串的形式输出多维数组。
6. JDK6.0中可以使用foreach语句简化数组依次存取时的编写方式,例如:
//对于对象数组
String[] arr = {"Beijing","Shanghai","Shenzhen"};
for(String s : arr)
System.out.println(s);
//对于二维数组
int[][] arr = { {1,2,3},
{4,5,6},
{7,8,9} };
for(int[] row : arr){
for(int element : row)
System.out.print(element+" ");
System.out.println();
1楼说的是集合吧。
不明白你想知道些什么,数组用的比较少,能用数组的集合都可以代替了。而且功能更强大。
lz真懒