本文转自 http://blog.sina.com.cn/s/blog_52fea7b60100s0hl.html

今天做项目中正好遇到该问题,就在网上查了下,这篇有些细节问题还是讲得挺好的。

★ 数组转Collection
使用Apache Jakarta Commons Collections:

import org.apache.commons.collections.CollectionUtils;   
  
String[] strArray = {"aaa", "bbb", "ccc"};   
List strList = new ArrayList();   
Set strSet = new HashSet();   
CollectionUtils.addAll(strList, strArray);   
CollectionUtils.addAll(strSet, strArray);  
CollectionUtils.addAll()方法的实现很简单,只是循环使用了Collection的add()方法而已。

如果只是想将数组转换成List,可以用JDK中的java.util.Arrays类:

import java.util.Arrays;   
  
String[] strArray = {"aaa", "bbb", "ccc"};   
List strList = Arrays.asList(strArray);  
不过Arrays.asList()方法返回的List不能add对象,因为该方法的实现是使用参数引用的数组的大小来new的一个ArrayList。

★ Collection转数组
直接使用Collection的toArray()方法,该方法有两个重载版本:

Object[] toArray();   
  
T[] toArray(T[] a);

★ Map转Collection
直接使用Map的values()方法。

★ List和Set转换
List list = new ArrayList(new Hashset());// Fixed-size list
List list = Arrays.asList(array);// Growable
list list = new LinkedList(Arrays.asList(array));// Duplicate elements are discarded
Set set = new HashSet(Arrays.asList(array));

2》:集合转数组

1.List转换成为数组。(这里的List是实体是ArrayList)  调用ArrayList的toArray方法。
  toArray
       <!-- frame contents -->

<!-- /frame contents -->     public <T> T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组;返回数组的运行时类型就是指定数组的运行时类型。假如列表能放入指定的数组,则返回放入此列表元素的数组。否则,将根据指定数组的运行时类型和此列表的大小分配一个新的数组。
  假如指定的数组能容纳列表并有剩余空间(即数组的元素比列表的多),那么会将数组中紧跟在集合末尾的元素设置为 null。这对确定列表的长度很有用,但只 在调用方知道列表中不包含任何 null 元素时才有用。
  指定者:
  接口 Collection<E> 中的 toArray
  指定者:
  接口 List<E> 中的 toArray
  覆盖:
  类 AbstractCollection<E> 中的 toArray
  参数:
  a - 要存储列表元素的数组,假如它足够大的话;否则,它是一个为存储列表元素而分配的、具有相同运行时类型的新数组。
  返回:
  包含列表元素的数组。
  抛出:
  ArrayStoreException - 假如 a 的运行时类型不是此列表中每个元素的运行时类型的超类型。

  具体用法:
  List list = new ArrayList();
  list.add("1");
  list.add("2");
  final int size =  list.size();
  String[] arr = (String[])list.toArray(new String[size]);

  2.数组转换成为List。
  调用Arrays的asList方法.
  asList
  public static <T> List<T> asList(T... a)返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直写”到数组。)此方法同 Collection.toArray 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。
  此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:

       List stooges = Arrays.asList("Larry", "Moe", "Curly");
   
  参数:
  a - 支持列表的数组。
  返回:
  指定数组的列表视图。
  另请参见:
  Collection.toArray()

  具体用法:
  String[] arr = new String[] {"1", "2"};
  List list = Arrays.asList(arr);

集合转数组、数组转集合实例

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TestMain {
 
 public static void main(String[] args) {
  List<User> list = new ArrayList<TestMain.User>();
  User user1 = new User();
  user1.setId(1L);
  list.add(user1);
  
  User user2 = new User();
  user2.setId(2L);
  list.add(user2);
  
  User[] userArray = list.toArray(new User[0]);
  for(User u : userArray) {
   System.out.println(u.getId());
  }
  
  List<User> userList = Arrays.asList(userArray);
  for(User u : userList) {
   System.out.println(u.getId());
  }
 }

public static class User {
  private Long id;

public Long getId() {
   return id;
  }

public void setId(Long id) {
   this.id = id;
  }

}
}

import java.util.Arrays;
 
public class TestMain {
 
    public static void main(String[] args) {
        String[] fileTypes = new String[]{"gif", "jpg", "jpeg", "png", "bmp"};
        if(Arrays.<String>asList(fileTypes).contains("gif")) {
            System.out.println("包含");
        } else {
            System.out.println("不包含");
        }
    }
}

List、Set和数组之间的转换(转载)的更多相关文章

  1. C# 16进制与字符串、字节数组之间的转换 (转载)

    1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制 Console.WriteLine(, )); //十进制转八进制 Console.WriteLine(, )); / ...

  2. C# 16进制与字符串、字节数组之间的转换

    1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串//十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToStrin ...

  3. C# 16进制与字符串、字节数组之间的转换(转)

    1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串   //十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToSt ...

  4. JAVA中list,set,数组之间的转换详解

    JAVA的list,set,数组之间的转换,主要是使用Apache Jakarta Commons Collections,具体的方法如下:import org.apache.commons.coll ...

  5. Java 集合 集合与数组之间的转换

    Java 集合 集合与数组之间的转换 @author ixenos 数组转集合 Arrays.asList(T... a) 先给结论:用 Arrays.asList(T... a) 将数组转换成集合 ...

  6. C#串口通讯,16进制与字符串、字节数组之间的转换。

    1.将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, ...

  7. java中 列表,集合,数组之间的转换

    java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 List和Set都是接口,它们继承Collection(集合),集合里面任何数据 ...

  8. Delphi字符串、PChar与字符数组之间的转换

    来自:http://my.oschina.net/kavensu/blog/193719 ------------------------------------------------------- ...

  9. C# 16进制与字符串、字节数组之间的转换(串口通讯中)

    1.c#中如何将十进制数的字符串转化成十六进制数的字符串//十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToString( ...

随机推荐

  1. 【android】安卓手机连接电脑了,但是adb devices找不到设备及找到设备但无权限的问题

    安卓手机连接电脑的时候,会遇到adb连接失败,adb devices为空,或者连接成功,但是显示unauthorized的情况.遇到这种情况,一般认为是手机驱动安装失败,会选择重新下载安装驱动,如果还 ...

  2. 说说Python中的闭包

    Python中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西. 闭包的概念 我们尝试从概念上去理解一下闭包. 在一些语言中,在函数中可以(嵌套)定义另一个 ...

  3. java中==和equals的区别(转)

    java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(== ...

  4. vue--js里跳转页面

    我们知道在vue里进行页面跳转的话,我们使用<router-link>这个标签 那在构造函数里我们不能直接操纵DOM元素,我们又该如何进行页面跳转呢? 步骤1: 我们先在DOM里设置三个按 ...

  5. ArcGIS Pro开发Web3D应用(3)——Server/Portal授权服务开发

    1.整体环境搭建完成 WebAdaptor.DataStore.Portal for arcgis.arcgis server.arcgis pro都成功部署安装,不管是同服务器还是不同服务器,最好做 ...

  6. C# Timer 定时任务

    C#中,Timer是一个定时器,它可以按照指定的时间间隔或者指定的时间执行一个事件. 指定时间间隔是指按特定的时间间隔,如每1分钟.每10分钟.每1个小时等执行指定事件: 指定时间是指每小时的第30分 ...

  7. 一款好用的JS时间日期插件layDate

    觉得这个插件很不错,使用起来也很方便,推荐使用 1.插件截图 2.插件配置 选择很多,配置也很简单,插件官网:https://www.layui.com/laydate/配置说得很明确,基本操作就是: ...

  8. LeetCode--027--移除元素(java)

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  9. POJ-3450 Corporate Identity (KMP+后缀数组)

    Description Beside other services, ACM helps companies to clearly state their “corporate identity”, ...

  10. YouTuboba视频搬运~哔哩哔哩

    将YouTube上面的视频搬运到哔哩哔哩上面教程 1.首先选择YouTube上面一个视频,需要谷歌登录,然后保存这个视频播放链接. 2.在浏览器中输入这个网址:en.savefrom.net,点击En ...