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
}
}
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与数组间相互转换的更多相关文章
- 在Java中怎样把数组转换为ArrayList?
翻译自:How to Convert Array to ArrayList in Java? 本文分析了Stack Overflow上最热门的的一个问题的答案,提问者获得了很多声望点,使得他得到了在S ...
- java中ArrayList 、LinkList区别
转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...
- JAVA中ArrayList用法
JAVA中ArrayList用法 2011-07-20 15:02:03| 分类: 计算机专业 | 标签:java arraylist用法 |举报|字号 订阅 Java学习过程中做题时 ...
- Java中ArrayList与LinkedList的区别
Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...
- Java中arraylist和linkedlist源代码分析与性能比較
Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arra ...
- Java中创建泛型数组
Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...
- java中ArrayList 和 LinkedList 有什么区别
转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...
- php中 xml json 数组 之间相互转换
php中 xml json 数组 之间相互转换 1 数组转json $result = array( 'status' =>$status, 'message'=>$message, ' ...
- [转]Java中怎样把数组转换为ArrayList
方法汇总: Element[] array = {new Element(1),new Element(2),new Element(3)}; ArrayList<Element> arr ...
随机推荐
- mongodb查看数据库和表的信息
mongodb查看数据库和表的方法比较简单,在为这里推荐使用stats的方法,直观并且详细. 1.查看数据库 db.stats();1输出: { "db" : "siri ...
- Git 原理入门
Git 是最流行的版本管理工具,也是程序员的必备技能之一. 即使天天使用它,很多人也未必了解它的原理.Git 为什么可以管理版本?git add.git commit这些基本命令,到底在做什么,你说得 ...
- YII2集成GOAOP,实现面向方面编程!
引言: 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统的工程需要将系统分解成可以创建和管理的模块.于是出现了以系统模块化特性的面向对象程序设计技术.模块化的面向对象编程极度地提高了 ...
- TortoiseGit —— 配置密钥
TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥.使用命令ssh-keygen -C "邮箱地址" -t rsa产生的密钥在Tortoi ...
- Spark 加载数据库mysql表中数据进行分析
1.工程maven依赖包 <properties> <spark_version>2.3.1</spark_version> <!-- elasticsear ...
- STM32 硬件UART接收超时检测设置
STM32 硬件UART接收超时检测设置 -----------------本文作者"智御电子",期待与电子爱好者交流学习.---------------- 应用场景 在uart应 ...
- 关于verilog中的signed类型
在数字电路中,出于应用的需要,我们可以使用无符号数,即包括0及整数的集合:也可以使用有符号数,即包括0和正负数的集合.在更加复杂的系统中,也许这两种类型的数,我们都会用到. 有符号数通常以2的补码形式 ...
- Python入门 (三)
迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器 ...
- .Net 面试题 汇总(五)
1.简述javascript中的“=.==.===”的区别? =赋值 ==比较是否一般相等 "3"==3 //会做类型的隐式转换,true ===比较是否严格相等 "3& ...
- SpaceVim 语言模块 elixir
原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属快捷键 交互式编程 运行当前脚本 模块简介 这一模块为 ...