java数组tolist
❶ java 怎么把list转换成数组
ArrayList<String> list=new ArrayList<String>();
String strings[]=(String [])list.toArray();
这样写代码个人觉得应该没什么问题,编译也没有问题。可是具体运行的时候报异常,如下:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
但是这么写是没有问题的:
ArrayList<String> list=new ArrayList<String>();
String strings[]=new String[list.size()];
for(int i=0,j=list.size();i<j;i++){
strings[i]=list.get(i);
}
对于这个现象我们可以这么解释:Java中允许向上和向下转型,但是这个转型是否成功是根据Java虚拟机中这个对象的类型来实现的。Java虚拟机中保存了每个对象的类型。而数组也是一个对象。数组的类型是[Ljava.lang.Object。把[Ljava.lang.Object转换成[Ljava.lang.String是显然不可能的事情,因为这里是一个向下转型,而虚拟机只保存了这是一个Object的数组,不能保证数组中的元素是String的,所以这个转型不能成功。数组里面的元素只是元素的引用,不是存储的具体元素,所以数组中元素的类型还是保存在Java虚拟机中的。
根据上面的解释,我们可以把这个问题归纳到下面这个模型:
Object objs[]=new Object[10];
String strs[]=(String[])objs;
这样子和刚才上面编译错误是一样的。如果我们修改一下这个代码,如下:
String strs[]=new String[10];
Object objs[]=strs;
这样子就可以编译通过了。所以这个问题我们可以归结为一个Java转型规则的问题。下面谈一下Java数组对范型的支持问题。
JDK5中已经有了对范型的支持,这样可以保证在集合和Map中的数据类型的安全,可是,List的toArray方法返回的竟然是Object []让人很迷惑。个人感觉应该可以根据范型,直接返回相应的T []。仔细看了一下JDK的发现List转化为array有两个方法:
public Object[] toArray();
这个方法把List中的全部元素返回一个相同大小的数组,数组中的所有元素都为Object类型。
public <T> T[] toArray(T[] a);
这个方法把List中的全部元素返回一个相同大小的数组,数组中的所有元素都为T类型。
List如此设计是因为Java编译器不允许我们new范型数组。也就是说你不能这么定义一个数组:
T arr=new T[size];
但是你却可以用T[]来表示数组,而且可以把数组强制转化为T[]。比如List中的public <T> T[] toArray(T[] a)是这么实现的:
public <T> T[] toArray(T[] a) {
if (a.length < size)
a = (T[])java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), size);
System.array(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
从上面代码中可以看到,因为你不知道这个数组的类型,你必须通过反射机制创建这个数组(a.getClass().getComponentType()方法是取得一个数组元素的类型)。
最终,List转换为Array可以这样处理:
ArrayList<String> list=new ArrayList<String>();
String[] strings = new String[list.size()];
list.toArray(strings);
反过来,如果要将数组转成List怎么办呢?如下:
String[] s = {"a","b","c"};
List list = java.util.Arrays.asList(s);
❷ java 为什么 数组转list
都是集合,看你如何使用,没什么可转的,要不就是new数组,遍历list一个一个放进去
❸ Java数组排列问题:输入一个数组,位数由小到大排列,相同位数时由大到小排列。
int[]i=newint[];
//给i赋值
for(intj=0;j<i.length-1;j++){
for(intk=0;k<i.length;k++){
if(i[j].toString().length()>i[k].toString().length()){
//按位数排序
}
if(i[j].toString().length()==i[k].toString().length()){
//按大小排序
}
}
}
差不多就是这个思路吧
❹ java 怎么把数组转为list
1.List转换成为数组。(这里的List是实体是ArrayList)
调用ArrayList的toArray方法。
toArray
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);
❺ java 怎么将jsonarray转换成list
jsonarray转换成list代码如下:
public class JsonTest {
/**
* @param args
*/
public static void main(String[] args) {
// 转换方法1
JSONArray array = JSONArray.fromObject("[{'name':'hehe','age':22}]");
List<Person> list = JSONArray.toList(array, Person.class);// 过时方法
System.out.println(list.get(0).getName());
// 转换方法2
List<?> list2 = JSONArray.toList(array, new Person(), new JsonConfig());//参数1为要转换的JSONArray数据,参数2为要转换的目标数据,即List盛装的数据
Person person = (Person) list2.get(0);
System.out.println(person.getAge());
}
}
❻ java中数组如何转换成List
//小例子
//这里注意的是,不能是基本类型,必须是包装类Byte[]可以。
publicclassDemo{
publicstaticvoidmain(String[]args)throwsException{
String[]arr={"asd","sd","df"};
Listlist=Arrays.asList(arr);
System.out.println(list);
}
}
❼ java实现把List的值放入一个数组中
int currentSize = out_list.size();
Object[] ary = {out_list.get(currentSize -1),out_list.get(currentSize -2),out_list.get(currentSize -3)};
就行了
❽ java怎么把list转成数组
publicstaticvoidlistToarray(){List<String>list=newArrayList<String>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");String[]arr=(String[])list.toArray(newString[list.size()]);for(inti=0;i<arr.length;i++){System.out.println(arr[i]);}}
❾ 关于java集合的一个问题,怎么把一个数组添加到List集合
在第10行定义list的时候类型定义为数组类型就行。
ArrayList<int[]> list=new ArrayList<>();
如果list是按bean对象存,则对象要改变:之前List对象存2个属性:DepartID,num,添加后的对象有3个属性:DepartID,num,dpsNum,所以要定义新的List对象来存两个List的结果。(见下面代码,已调通,1个main类,3个对象类)。
如果list是按string存而非bean对象,则for循环遍历list1后,将list2字符串拼接到list1末尾,再覆盖进list1对应结果中就行,list1.set(index,list1.get(index)+list2.get(index)),类似这句,没调试过。
(9)java数组tolist扩展阅读:
Java中的集合类可以分为两大类:一类是实现Collection接口;另一类是实现Map接口。
Collection是一个基本的集合接口,Collection中可以容纳一组集合元素(Element)。
Java提供了对象的数种保存方式,除了内置的数组以外,其余的称为集合类。为了使程序方便地存储和操纵数目不固定的一组数据,JDK中提供了Java集合类,所有Java集合类都位于Java.util包中,与Java数组不同,Java集合不能存放基本数据类型数据,而只能存放对象的引用。
❿ java怎么将数组转化为list
1. String[] userid = {"aa","bb","cc"};List userList = new ArrayList();Collections.addAll(userList, userid);2. String[] userid = {"aa","bb","cc"};List userList = Arrays.asList(userid);3. 循环操作数组再add 望采纳。