Java中ArrayList与数组间相互转换

  在实际的 Java 开发中,如何选择数据结构是一个非常重要的问题。

衡量标准化(读的效率与改的效率) :

   ① Array: 读快改慢

② Linked :改快读慢

③ Hash:介于两者之间

实现List、Set和数组之间转换的关键点如下:(一定要注意泛型的引用)

  1. List转换成数组可以使用List的toArray方法,返回一个Object数组;

    2. Set转换成数组可以使用Set的toArray方法,返回一个Object数组;

   3. 如果List或Set中元素的类型都为A,那么可以使用带参数的toArray方法,得到类型为A的数组,具体语句是“(A[])set.toArray(new A[0])”;

 4.  数组转换成List可以使用Arrays的asList静态方法,得到一个List;

    5. 数组转化成Set时,需要先将数组转化成List再用List构造Set;

Demo_1:List 转数组

import java.util.*;
public class Test {
	public static void print(Double arr[]) {
		for (int i=0; i<arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
	}
	public static void main(String[] args) {
    	ArrayList<Double> list = new ArrayList<Double>();
    	// 若不写成泛型(<Double>)的方式,则下面: Double arr3[] = list.toArray(new Double[0]);
    	// 要改写成:Double arr3[] = (Double[])list.toArray(new Double[0]);
        list.add(1.23);
        list.add(4.57);
        list.add(2.38);
        list.add(4.598);
        int size = list.size();
        System.out.println(size); // 输出:4
// 第一种方法,不推荐
        Double arr1[] = new Double[size];
        for(int i=0;i<size;i++){
            arr1[i]=(double)list.get(i);
        }
        print(arr1); // 输出:1.23 4.57 2.38 4.598
// 第二种方法,推荐
        // 当list中的数据类型都一致时可以将list转化为数组
        Object arr2[] = list.toArray();
        System.out.println("从list转换成的对象数组长度为:" + arr2.length); // 输出:从list转换成的对象数组长度为:4
        // 在转化为其它类型的数组时需要强制类型转换,并且,要使用带参数的toArray方法,参数为对象数组.
        // 将list中的内容放入参数数组中,当参数数组的长度小于list的元素个数时,会自动扩充数组的长度以适应list的长度
        Double arr3[] = list.toArray(new Double[0]);
        System.out.println("从list转换成的字符串数组长度为:" + arr3.length); // 输出:从list转换成的字符串数组长度为:4
        print(arr3); // 输出:1.23 4.57 2.38 4.598
        // 分配一个长度与list的长度相等的字符串数组
        Double[] arr4 = list.toArray(new Double[list.size()]);
        System.out.println("从list转换成的字符串数组长度为:" + arr4.length); // 输出:从list转换成的字符串数组长度为:4
        print(arr4); // 输出: 1.23 4.57 2.38 4.598
	}
}

Demo_2:数组转 List

import java.util.*;
public class Test {
	   public static void main(String[] args) {
	      List<Double> list = new ArrayList<Double>();
	      list.add(1.23);
	      list.add(4.57);
	      list.add(2.38);
	      list.add(4.598);
	      System.out.println(list); // 输出:[1.23, 4.57, 2.38, 4.598]
	      list.clear();
	      System.out.println(list.size()); // 输出:0
	   // 直接使用Arrays的asList方法
	      Double arr[] = {1.23,4.57,2.38,4.598};
	      list = Arrays.asList(arr);
	      System.out.println("将数组转换成list的元素个数为:" + list.size()); // 输出:将数组转换成list的元素个数为:4
	      System.out.println(list); // 输出:[1.23, 4.57, 2.38, 4.598]
	   }
}

Demo_3:set 转数组

import java.util.*;
public class Test {
	public static void print(Double arr[]) {
		for (int i=0; i<arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
	}
	public static void main(String[] args) {
    	HashSet<Double> set = new HashSet<Double>();
    	// 若不写成泛型(<Double>)的方式,则下面: Double arr3[] = set.toArray(new Double[0]);
    	// 要改写成:Double arr3[] = (Double[])set.toArray(new Double[0]);
        set.add(1.23);
        set.add(4.57);
        set.add(2.38);
        set.add(4.598);
        int size = set.size();
        System.out.println(size); // 输出:4
// 第一种方法,不推荐
        Double arr[] = new Double[size];
        Iterator<Double> i = set.iterator();
        // 若写成 Iterator i = set.iterator(),则下面要写成 arr[j] = (Double) i.next();
        int j =0;
        while(i.hasNext()){
        	arr[j] = i.next();
        	j++;
        }
        print(arr); // 输出:4.598 2.38 1.23 4.57
// 第二种方法,推荐
        // 当set中的数据类型都一致时可以将set转化为数组
        Object arr1[] = set.toArray();
        System.out.println("从set转换成的对象数组长度为:" + arr1.length); // 输出:从set转换成的对象数组长度为:4
        // 在转化为其它类型的数组时需要强制类型转换,并且,要使用带参数的toArray方法,参数为对象数组.
        // 将set中的内容放入参数数组中,当参数数组的长度小于set的元素个数时,会自动扩充数组的长度以适应list的长度
        Double arr2[] = set.toArray(new Double[0]);
        System.out.println("从set转换成的Double数组长度为:" + arr2.length); // 输出:从list转换成的字符串数组长度为:4
        print(arr2); // 输出:4.598 2.38 1.23 4.57
        // 分配一个长度与list的长度相等的字符串数组
        Double[] arr3 = set.toArray(new Double[set.size()]);
        System.out.println("从set转换成的字符串数组长度为:" + arr3.length); // 输出:从list转换成的字符串数组长度为:4
        print(arr3); // 输出: 4.598 2.38 1.23 4.57
	}
}
时间: 2024-11-08 06:03:00

Java中ArrayList与数组间相互转换的相关文章

在Java中怎样把数组转换为ArrayList?

翻译自:How to Convert Array to ArrayList in Java? 本文分析了Stack Overflow上最热门的的一个问题的答案,提问者获得了很多声望点,使得他得到了在Stack Overflow上做很多事情的权限.这跟我没什么关系,我们还是先看看这个问题吧. 这个问题是"在Java中怎样把数组转换为ArrayList?" Element[] array = {new Element(1),new Element(2),new Element(3)}; 1

Java中arraylist和linkedlist源代码分析与性能比較

Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arraylist和linkedlist的性能. 2,arraylist源代码分析 Arraylist底层的数据结构是一个对象数组.有一个size的成员变量标记数组中元素的个数,例如以下图: * The array buffer into which the elements of the ArrayLis

java中ArrayList 、LinkList区别

转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.LinkedList,但是最好的方式还是看源代码.其实ArrayList就是一个动态数组,LinkedList是一个链表.  1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.     2.对于随机访问get和set,ArrayList优于LinkedLis

JAVA中ArrayList用法

JAVA中ArrayList用法 2011-07-20 15:02:03|  分类: 计算机专业 |  标签:java  arraylist用法  |举报|字号 订阅 Java学习过程中做题时,用到ArrayList,在网上寻找到的学习资料.   摘自:     http://www.cnblogs.com/skylaugh/archive/2006/09/15/505346.html System.Collections.ArrayList类是一个特殊的数组.通过添加和删除元素,就可以动态改变

Java中集合与数组的切换

在Java开发中常常遇见集合与数组的互相切换,如何实现呢,呵呵呵,很简单: import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; public class Test { /** * 将Set集合转换为数组 * * @author GaoHuanjie */ private static void setT

Java中arraylist和linkedlist源码分析与性能比较

Java中arraylist和linkedlist源码分析与性能比较 1,简介 在java开发中比较常用的数据结构是arraylist和linkedlist,本文主要从源码角度分析arraylist和linkedlist的性能. 2,arraylist源码分析 Arraylist底层的数据结构是一个对象数组,有一个size的成员变量标记数组中元素的个数,如下图: * The array buffer into which the elements of the ArrayList are sto

java中的函数,数组

函数 程序中独立的过程 函数的语法: 函数的定义 声明 static 返回值类型 函数名 (参数表) 形式参数:形参 在函数内部有效的局部变量 实现 { 语句 } 函数的调用 函数名(参数); 实际参数:实参 为形参赋值 接收返回值 函数的作用: 1. 减少冗余代码,提高程序的可维护性 2. 可重用性 函数库 3. 加强代码的结构化 提高可读性 利于分工 非结构化编程(语句) ---> 结构化编程(函数) ---> 面向对象(类) 数组 一次性定义多个同类型的变量 数组空间在内存是连续的 定义

php中 xml json 数组 之间相互转换

php中 xml json  数组 之间相互转换 1 数组转json $result = array( 'status' =>$status, 'message'=>$message, 'data'=>$data, ); json_encode($result);

java中的对象数组

对象数组,很容易顾名思义理解为:数组中的元素都是一个个的对象.但这种理解是错误的,数组中存放的并不是对象本身,而是对象的引用,即指向对象的那个指针,而这个指针是存放在虚拟机内存的栈中. 对象数组的创建需要两个步骤:1)创建一个数组,存放对象的引用.2)具体指出每个引用指向哪个对象(用new实现).下面举例说明. 假设有一个类,类名为Test.1)Test[] array = new Test[2]; 创建一个数组取名为array,里面共有2个元素,每个元素的类型是Test对象的引用.此时arra