这里总结一下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()转换出来的数组是一个新的数组,不会影响到原来的数组。

"有些人明明看起来很友善,却总是独来独往。"

最新文章

  1. GGXX的卡通渲染实现 真的好变态......
  2. JQuery------.load()从服务器获取数据并加载到某个类的方法
  3. mysql可以用这种方式&lt;&lt;! 输入内容 ! 做成脚本
  4. 学习笔记:Twitter核心数据类库团队的Hadoop优化经验
  5. markdown下编辑latex数学公式
  6. oracle常见权限分配
  7. Understanding node.js
  8. angular实践第一弹:选项卡开发
  9. 第一个leapmotion的小游戏
  10. Android(java)学习笔记158:Java程序入口和Android的APK入口
  11. python manage.py shell之后的一些错误:
  12. python学习第二课要点记录
  13. Python 技巧
  14. android简单的计算器
  15. 201521123064 《Java程序设计》第14周学习总结
  16. 20165230 Exp3 免杀原理与实践
  17. 『链接』Microsoft Visual C Redistributable/VC 再发行库 下载哪家强?
  18. hibernate框架学习之一级缓存
  19. fio 测试磁盘性能
  20. eclipse去掉所有断点 恢复到默认窗口

热门文章

  1. IDEA最常用快捷键汇总+快速写出Main函数
  2. 【前端知识体系-JS相关】10分钟搞定JavaScript正则表达式高频考点
  3. 程序员用于机器学习编程的Python 数据处理库 pandas 进阶教程
  4. Python 编程语言要掌握的技能之一:编写条件分支代码的技巧
  5. DDD实战与进阶 - 值对象
  6. 【python测试开发栈】—python内存管理机制(二)—垃圾回收
  7. 软件测试必须掌握的抓包工具Wireshark,你会了么?
  8. 4k图片爬取+中文乱码
  9. 系统默认的alert弹出框总会带有域名
  10. 【原创】004 | 搭上SpringBoot事务诡异事件分析专车