在实际的 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
}
}

Demo_4:数组转 set

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

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

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

    翻译自:How to Convert Array to ArrayList in Java? 本文分析了Stack Overflow上最热门的的一个问题的答案,提问者获得了很多声望点,使得他得到了在S ...

  2. java中ArrayList 、LinkList区别

    转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...

  3. JAVA中ArrayList用法

    JAVA中ArrayList用法 2011-07-20 15:02:03|  分类: 计算机专业 |  标签:java  arraylist用法  |举报|字号 订阅     Java学习过程中做题时 ...

  4. Java中ArrayList与LinkedList的区别

    Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...

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

    Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arra ...

  6. Java中创建泛型数组

    Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...

  7. java中ArrayList 和 LinkedList 有什么区别

    转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...

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

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

  9. [转]Java中怎样把数组转换为ArrayList

    方法汇总: Element[] array = {new Element(1),new Element(2),new Element(3)}; ArrayList<Element> arr ...

随机推荐

  1. 对于gitHub的总结随笔

    作用:用于项目的版本管理     密切相关的是       git                操作  1.本地的文件上传到github上                              ...

  2. Flask之Flask实例有哪些参数

    常用的参数应用实例 from flask import Flask, render_template, url_for, session, request, redirect app = Flask( ...

  3. 【C】关键字void的用法

    void有两种功能 [1]没有 [2]任意类型 void出现的位置不同会有不同的解释 [1]void func( void ) func左边的void,代表『没有返回值』 func右边的括弧里的voi ...

  4. 《JavaScript实用效果整理》系列分享专栏

    整理一些使用的JavaScript效果,在Web开发中遇到的比较好的动态效果,都收藏在这里,对以后的网站开发增加不少的色彩 <JavaScript实用效果整理>已整理成PDF文档,点击可直 ...

  5. 如何将github项目上传至gitlab

    一.修改远程分支关联 删除远程分支关联 将指向github的远程分支关联关系删除 git remote rm origin 添加新的远程分支关联 新的remote地址指向gitlab相应地址 git ...

  6. MDK/Keil 中,J-Link调试查看变量值总是显示<not in scope>

    转载请注明出处,谢谢. MDK/Keil 中,J-Link调试查看变量值总是显示<not in scope> 原因:编译器把代码优化掉了,直接导致在仿真中变量根本没有分配内存,也就无法查看 ...

  7. python--模块之random随机数模块

    作用是产生随机数 import random random.random:用于生成一个0--1的随机浮点数. print(random.random())>>0.3355102133472 ...

  8. 北京Uber优步司机奖励政策(3月26日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 北京Uber优步司机奖励政策(2月25日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. 苏州Uber优步司机奖励政策(8月31日至9月6日)

    当周最新司机奖励(8月31日至9月6日) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http: ...