array、list和set相互转化的方法
这里总结一下Array、List和Set相互转化的方法。
Array转化为List
将Array转化为List是使用Arrays.asList()方法。
String[] arr= new String[]{"yanggb1", "yanggb2", "yanggb3"};
List list = Arrays.asList(arr); list.add("yanggb4"); // not ok
list.remove("yanggb2"); // not ok
要注意的是,Arrays.asList()方法的返回对象是一个Arrays内部类,并没有实现集合的修改方法。因此转化后的List并不能添加新元素或删除元素,会报错。
实际上,Arrays.asList()方法体现的是适配器模式,只是转换接口,而后台的数据仍是数组。这就意味着,如果对转换后的list中的元素进行修改,修改的结果会反映到原来的数组中,因为操作的实际上是原来的数组。
Array转Set
将Array转Set是使用Set集合的构造方法。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
Set<String> set = new HashSet<>(Arrays.asList(arr));
set.add("yanggb4"); // ok
set.remove("yanggb2"); // ok
转换成Set集合之后可以添加元素或删除元素,因为是调用构造函数new出来的一个HashSet。
另外要注意的是,对转换后的Set集合进行的操作并不会影响到原来的Array。
System.out.println(set); // [yanggb3, yanggb1, yanggb4]
System.out.println(arr[2]); // yanggb3
也可以看到,这种方式转换出来的Set相对原来的的数据来说是倒序的。
List转Set
将List转Set同样是使用Set集合的构造方法。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
List<String> list = Arrays.asList(arr);
Set<String> set = new HashSet(list);
Set转List
将Set转List也可以使用List的构造方法。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
Set<String> set = new HashSet<>(Arrays.asList(arr));
List<String> list = new ArrayList<>(set);
List或Set转Array
List或Set转Array可以使用Collection.toArray()方法。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
List<String> list = Arrays.asList(arr);
Set<String> set = new HashSet(list);
String[] arr1 = list.toArray(new String[list.size()]);
String[] arr2 = set.toArray(new String[set.size()]);
这里要注意的是,调用Collection.toArray(T[] t)方法的集合需要有指定其中元素的具体类型,否则会出现类型转换无效的情况(编译直接报错),这时候需要强行转化才可以。
String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
List list = Arrays.asList(arr);
Set set = new HashSet(list);
String[] arr1 = (String[])list.toArray();
String[] arr2 = (String[])set.toArray();
另外要注意的是,使用Collection.toArray()转换出来的数组是一个新的数组,不会影响到原来的数组。
"有些人明明看起来很友善,却总是独来独往。"
array、list和set相互转化的方法的更多相关文章
- 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型
前文提要:[js实例]js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法6.操作方法 ...
- ios开发中object-c中UTF-8 和 GBK 的 NSString 相互转化的方法
应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎, 就会满屏乱码.下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法 NS ...
- ECMAScript 5中对Array中新增了9个方法
ECMAScript 5中对Array中新增了9个方法: 5个迭代方法(循环操作数组中的各个项):forEach(),map(),filter(),every()和some() 2个归并方法(迭代数组 ...
- js中字符串和数组相互转化的方法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #e4af0a } p. ...
- JavaScript引用类型之Array数组之强大的splice()方法
splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...
- JavaScript引用类型之Array数组的toString()和valueof()方法的区别
一.转换方法 1.在JavaScript中几乎所有对象都具有toLocaleString().toString和valueof()方法,因为,所有的对象都继承自Object,而前面所说的方法都是Obj ...
- Array数组常用的5个方法
es6 时代来临了,不知道es5 你熟知了吗? 在此介绍一个我常用到的5个方法,万恶的ie9一下并不支持,需要做兼容慎用 indexOf indexOf()方法返回在该数组中第一个找到的元素位置,如果 ...
- Vue源码之----为什么Vue中Array的pop,push等方法可以reactive,而Array[0]='a'这样的方法不会reactive?
这就要从reactive开始讲起了,粗略的说,js的操作能引起页面上显示的改变,是因为该操作引起了组件的重新渲染,渲染会生成新的虚拟节点,新节点和旧节点会对比,操作浏览器的node进行改变. vue实 ...
- byte数组和int之间相互转化的方法
Java中byte数组和int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送者接收的数据都是byte数组,但是int类型是4个byte组成的,如何把一个整形in ...
随机推荐
- python3 之 迭代器与生成器
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束. 迭代器只能往前不会后 ...
- 新闻实时分析系统 基于IDEA环境下的Spark2.X程序开发
1.Windows开发环境配置与安装 下载IDEA并安装,可以百度一下免费文档. 2.IDEA Maven工程创建与配置 1)配置maven 2)新建Project项目 3)选择maven骨架 4)创 ...
- JAVA——汉诺塔
大家还记得某年春晚小品那个把大象放冰箱需要几步吗? 今天,我准备写的是汉诺塔,有三个魔法石柱,分别:诚实.勇敢.正直.其中有一个石柱上从大到小,从地向上依次排放着四个魔法圆环,需要将那四个魔法圆环分别 ...
- jQuery学习笔记3
* 动画效果 * 在一定的时间内, 不断改变元素样式 * slideDown()/slideUp()/slideToggle() * fadeOut()/fadeIn()/fadeToggle() * ...
- 和SharpDX坑爹的Variant刚正面
和SharpDX坑爹的Variant刚正面 几个月前我写了和篇文章<.NET中生成动态验证码>文章,其实里面藏着一个大坑.运行里面的代码,会发现运行的gif图片并没有循环播放: 细心的网友 ...
- Jeewx-Boot 1.1 版本发布,基于SpringBoot的开源微信管家系统
项目介绍 JeewxBoot是一款基于SpringBoot的开源微信管家系统,采用SpringBoot2.1.3 + Mybatis + Velocity 框架技术.支持微信公众号.微信第三方平台(扫 ...
- Prometheus Label 标签管理
目录 前言 配置测试 删除metric值 重新加载配置文件后测试 更换 重新加载配置文件后测试 删除 Label 标签 前言 在prometheus监控体系中.标签label是一个极为重要的参数,考虑 ...
- ASP.NET Core 2 preview 1中Program.cs,Startup.cs和CreateDefaultBuilder的探索
Exploring Program.cs, Startup.cs and CreateDefaultBuilder in ASP.NET Core 2 preview 1 ASP.NET Core 2 ...
- jQuery.hasClass() 函数详解
jQuery.hasClass() 函数详解 hasClass()函数用于指示当前jQuery对象所匹配的元素是否含有指定的css类名. 该函数属于jQuery对象(实例). 语法 JavaScrip ...
- SpringBoot 发送邮件功能实现
背景 有个小伙伴问我你以前发邮件功能怎么弄的.然后我就给他找了个demo,正好在此也写一下,分享给大家. 理清痛点 发送邮件,大家可以想一下,坑的地方在哪? 我觉得是三个吧. 第一:邮件白名单问题. ...