首页 新闻 会员 周边 捐助

java 中的数组问题

0
悬赏园豆:5 [待解决问题]

希望博主给总结下java中常用的数组问题,thanks

Greatzhouyou的主页 Greatzhouyou | 初学一级 | 园豆:197
提问于:2012-11-21 14:42
< >
分享
所有回答(5)
0
ArrayList适用于通过为位置来读取元素的场景;

  LinkedList 适用于要头尾操作或插入指定位置的场景;

  Vector 适用于要线程安全的ArrayList的场景;

  Stack 适用于线程安全的LIFO场景;

  HashSet 适用于对排序没有要求的非重复元素的存放;

  TreeSet 适用于要排序的非重复元素的存放;

  HashMap 适用于大部分key-value的存取场景;

  TreeMap 适用于需排序存放的key-value场景。
在 水 一 方 | 园豆:1097 (小虾三级) | 2012-11-21 17:13

这个似乎不是楼主想要的吧

支持(0) 反对(0) 明明小k | 园豆:246 (菜鸟二级) | 2013-05-09 07:15
0

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();

若雪封尘 | 园豆:663 (小虾三级) | 2012-11-26 11:51
0

1楼说的是集合吧。

angelshelter | 园豆:9914 (大侠五级) | 2012-12-11 14:11
0

不明白你想知道些什么,数组用的比较少,能用数组的集合都可以代替了。而且功能更强大。

息搏 | 园豆:227 (菜鸟二级) | 2013-02-20 11:33
0

lz真懒

嗨,你的益达~~~ | 园豆:221 (菜鸟二级) | 2013-07-31 15:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册