在实际的 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 ...
随机推荐
-
Azure China (10) 使用Azure China SAS Token
<Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China 注意:本文介绍的是Azure China Storage Priva ...
-
清空文件下的SVN控制文件
代码如下,复制代码为txt文件,更改后缀为“.bat”,把文件放到,需要删除的文件的顶端文件夹内,点击执行. @echo on color 2f mode con: cols= lines= @REM ...
-
在Go语言中使用JSON(去掉空字段)
Encode 将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error: func Marshal(v interface{}) ([]byte, error) ...
-
iOS Keychain钥匙串,应用间数据共享打造iOS上的全家桶
Demo先行:https://github.com/rayshen/GIKeychainGroupDemo 该demo里有2个工程,你先运行任何一个会存储一个值,再运行另一个会访问之前的app存储的值 ...
-
Moving From Top To Bottom in Detailed Block in Oracle Forms
Suppose you want to scan a tabular grid block (loop through all records in detail block) from top to ...
-
(转)【Unity3d】Glow + Outline 轮廓描边
转:http://www.cnblogs.com/dosomething/archive/2012/08/04/2622488.html [Unity3d]Glow + Outline 轮廓描边 轮廓 ...
-
后缀自动机(SAM):SPOJ Longest Common Substring II
Longest Common Substring II Time Limit: 2000ms Memory Limit: 262144KB A string is finite sequence of ...
-
MySQL中explain的type类型
| ALL | 全表扫描 | index | 索引全扫描 | range | 索引范围扫描,常用语<,<= ...
-
vs2015web工程中的html引用压缩后css后无法智能提示的问题解决
环境:win10x64 vs2015企业版 项目:空白web项目(.net framework4) 问题:html页面加入压缩后的css(eg:bootstrap.min.css),编码的时候无法智能 ...
-
Java反射机制详解(1) -反射定义
首先,我们在开始前提出一个问题: 1.在运行时,对于一个java类,能否知道属性和方法:能否去调用它的任意方法? 答案是肯定的. 本节所有目录如下: 什么是JAVA的反射机制 JDK中提供的Refle ...