ArrayList<Object> list = new ArrayList<Object>();
list.add(1);
list.add("Java");
list.add(3.14);
System.out.println(list.toString());
Run Code Online (Sandbox Code Playgroud)
我试过了:
ArrayList<String> list2 = (String)list;
Run Code Online (Sandbox Code Playgroud)
但它给了我一个编译错误.
我需要转换List<Object>为String[].
我做了:
List<Object> lst ...
String arr = lst.toString();
Run Code Online (Sandbox Code Playgroud)
但我得到了这个字符串:
["...", "...", "..."]
Run Code Online (Sandbox Code Playgroud)
只是一个字符串,但我需要String []
非常感谢.
我一直在学习如何使用java进行编程,而且我没有对LinkedLists toArray(T[] a)和toArray()方法的区别做出任何明确的解释.第二个只是将LinkedList对象中的所有元素作为数组返回,对吧?但是,第一个怎么样?
编辑:
我的意思是,我从oracle阅读文档,它说:
以适当的顺序返回包含此列表中所有元素的数组(从第一个元素到最后一个元素); 返回数组的运行时类型是指定数组的运行时类型.如果列表适合指定的数组,则返回其中.否则,将使用指定数组的运行时类型和此列表的大小分配新数组.如果列表适合指定的数组,并且空间足够(即,数组的元素多于列表),则紧跟在列表末尾的数组中的元素将设置为null.(仅当调用者知道列表不包含任何null元素时,这在确定列表长度时很有用.)
与toArray()方法一样,此方法充当基于数组的API和基于集合的API之间的桥梁.此外,该方法允许精确控制输出阵列的运行时类型,并且在某些情况下可以用于节省分配成本.
我不明白以粗体显示的句子的含义.
我有一个double [] []数组,我希望将一行放入float []数组中.铸造最初没有起作用,所以我寻找不同的东西.
我在stackoverflow中找到了一个优雅的解决方案,将Object []转换为String [],如果我将Object []转换为float [],它也可以工作.
所以:有没有优雅的方法将double []转换为float [],或者将double []转换为Object [],以便我可以在其他帖子中使用代码?
我将提供一个我正在做的示例代码,即使我认为它不是必要的:
double[][] datos = serie.toArray();
double[][] testArray = {{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}, {7.0, 8.0, 9.0}};
double[] doubleArray = Arrays.copyOf(testArray[1], testArray[1].length);
// This would be great but doesn't exist:
//float[] floatArray = Arrays.copyOf(doubleArray, doubleArray.length, float[].class);
Run Code Online (Sandbox Code Playgroud) 在通用堆栈的实现中,使用以下习语并且没有任何问题
public class GenericStack<Item> {
private int N;
private Item[] data;
public GenericStack(int sz) {
super();
data = (Item[]) new Object[sz];
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试以下操作时,它会导致ClassCastException
String[] stra = (String[]) new Object[4];
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)
你怎么解释这个?
我有一个包含可序列化对象的数组,我试图使用Intent的putExtra()和Bundle的getSerializable().但是,我得到一个类强制转换异常并且不明白为什么.
下面是代码.UserInfo是我自己的类,它实现了Serializable,我能够在活动之间传递单个UserInfo对象.我在尝试使用数组时遇到了这个问题.
发送序列化的代码:
Intent intent = new Intent( JOIN_GROUP ); //JOIN_GROUP is a constant string
String user_ids[] = packet.userIDs();
int length = user_ids.length;
UserInfo users[] = new UserInfo[length];
for ( int i = 0; i < length; ++i )
users[i] = getUserByID( user_ids[i] );
intent.putExtra( USERS_IN_GROUP, users );
Run Code Online (Sandbox Code Playgroud)
检索序列化的代码:
Bundle extra = intent.getExtras();
String action = intent.getAction();
if ( action.equals(IMService.JOIN_GROUP) )
{
//CLASS CAST EXCEPTION
UserInfo users[] = (UserInfo[]) extra.getSerializable( IMService.USERS_IN_GROUP );
}
Run Code Online (Sandbox Code Playgroud)
这是错误:

题
我知道我可能只是使用不同的数据结构,但我想理解为什么数组不可行,因为数组是可序列化的?
编辑: SnyersK能够得到一个更简单但类似的方案来工作.所以我尝试了同样的事情,我仍然得到同样的例外.在检索数组时,它将我的测试数组转换为Object,这导致了转换异常.
我的测试对象:
package …Run Code Online (Sandbox Code Playgroud) 我正在开发一个大应用程序,我发现了一个小细节.可以序列化Arrays并将它们放在一个包中.然后将其置于意图中并开始活动.但是在接收端,我必须通过痛苦的两步程序对阵列进行反序列化.
MyObj[] data = (MyObj[])bundle.getSerializable("key"); // doesn't work
Object[] temp = (Object[])bundle.getSerializable("key");
MyObj[] data2 = (MyObj[])temp, // doesn't work
MyObj[] data3 = new MyObj[temp.length]; // does work
for(int i = 0; i < temp.length; i++) {
data3[i] = (MyObj)temp[i];
}
Run Code Online (Sandbox Code Playgroud)
我必须经历数组循环的原因是什么?
可能重复:
如何在Java中将对象数组转换为字符串数组
我收到一个Object并将其转换为String数组,如下所示:
Object values[] = (Object[])request.getSession().getAttribute("userList");
String[] tmp = new String[values.length];
for(int i = 0; i < tmp.length; ++i) {
tmp[i] = (String) values[i];
out.println(tmp[i]);
}
Run Code Online (Sandbox Code Playgroud)
有没有更好,更清洁的方法来做到这一点?
我在许多答案(例如,这个)中看到,使用泛型创建数组的方法如下:
T[] array = (T[]) new Object[SIZE];
Run Code Online (Sandbox Code Playgroud)
我想尝试做类似的事情:
EntryRecipient<K,V>[] array = (EntryRecipient<K,V>[]) new Object[MAX_SIZE];
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,抛出以下错误:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LHashTable$EntryRecipient;
Run Code Online (Sandbox Code Playgroud)
我的代码是:
HashTableEntry(包含在HashTable的私有子类中)
class HashTableEntry<K,V> {
private K key;
private V value;
public HashTableEntry(K key, V value) {
this.key = key;
this.value = value;
}
public V value() {
return value;
}
public K key() {
return key;
}
}
Run Code Online (Sandbox Code Playgroud)
EntryRecipient(作为HashTable的私有子类包含)
private class EntryRecipient<K,V> {
private List<HashTableEntry<K,V>> entries;
public EntryRecipient() { …Run Code Online (Sandbox Code Playgroud) 如何在不知道其类型的情况下展开数组?
我有一个Object[],我知道它只包含Car例如实例.当我尝试将其类型转换为a时Car[],它会抛出ClassCastException.我在一个没有Generics的环境中工作.
我必须使用for循环手动将每个元素复制到一个新数组中,如下所示:
Car[] cars = new Car[objects.length];
for (int i = 0; i < objects.length; i++) {
cars[i] = (Car) objects[i];
}
Run Code Online (Sandbox Code Playgroud)
?