我有一个float [],我想得到一个具有相同元素的列表.我可以做一个又一个添加它们的丑陋的事情,但我想使用Arrays.asList方法.但是有一个问题.这有效:
List<Integer> list = Arrays.asList(1,2,3,4,5);
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list = Arrays.asList(ints);
Run Code Online (Sandbox Code Playgroud)
asList方法接受一个varargs参数,对我来说,扩展是一个数组的"简写".
问题:
为什么第二段代码返回List<int[]>但不返回List<int>.
有没有办法纠正它?
为什么自动装箱不在这里工作; 即int[]到Integer[]?
遗憾的是这不起作用:
long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);
Run Code Online (Sandbox Code Playgroud)
除了手动添加它们之外还有更好的方法吗?
我是Java的初学者。开发程序时,我创建了一个带有构造函数的对象,该构造函数以变量作为参数。但是当我在创建对象后更改变量的值时,我的对象具有第二个值而不是第一个值。我不希望我的对象更改值。我该怎么办?
public class Person {
public Person(int[] arrayTest) {
this.arrayTest = arrayTest;
}
public int[] getArray() {
return this.arrayTest;
}
public boolean canHaveAsArray(int[] arrayTest) {
return true;
}
private int[] arrayTest = new int[2];
public static void main(String[] args) {
int[] array = new int[] {5, 10};
Person obj1 = new Person(array);
array[0] = 20;
System.out.println(Arrays.toString(obj1.getArray()));
}
}
Run Code Online (Sandbox Code Playgroud)
我的输出应该是[5,10],但是我却得到[20,10]。即使如上所述更改数组的元素,我也需要获取[5,10]。我该怎么办?
数组没有"toList"函数,因此我们需要"Arrays.asList"辅助函数来进行转换.
这很奇怪:List有自己的函数转换为数组,但是数组需要一些辅助函数来转换为List.为什么不让数组具有"toList"函数,这个Java设计背后的原因是什么?
非常感谢.
有没有人知道一种有效,快速和干净的方式来转换Long[]为long[]Java,反之亦然,在明显的for循环中使用(un)box©?
注意:这不是关于拆箱Long或装箱long.我明确地谈论阵列!
"没有比循环和复制更好的方法"也是一个答案;)
编辑: 我知道做上述事情的意义,最好避免它.假设,我无法避免它,并希望在不使用第三方的情况下尽可能巧妙地做到这一点.
可能重复:
将对象数组转换为其基本类型的数组
我Parcel为Android 做了一个我试图通过转换它来打包ArrayList<Long>(toArray给我Long[])long[],有一个简单的方法来做到这一点吗?
我意识到我可以循环,但我想我正在寻找一个更优雅的解决方案.
我试图遍历一个数组,但是遇到了这个问题。当我遍历此数组时:
{1,2,3,4}
Run Code Online (Sandbox Code Playgroud)
我遇到了这个问题:在开始的时候,我将得到1和4的组合,但是在中间的时候,我将得到4和1的组合。我怎样才能做到这一点,因此只能接受唯一的关系?不能像{1,4}和{4,1}这样。
我正在使用Java,对此有一些答案,但是它们使用的语言仅在其他语言中可用。
不幸的是,我无法解决这个问题。
这是遍历数组后的预期输出:
{1, 2}
{1, 3}
{1, 4}
{2, 3}
{2, 4}
{3, 4}
Run Code Online (Sandbox Code Playgroud)
但是,这是遍历数组时实际发生的事情:
{1, 1}
{1, 2}
{1, 3}
{1, 4}
{2, 1}
{2, 2}
{2, 3}
{2, 4}
{3, 1}
{3, 2}
{3, 3}
{3, 4}
{4, 1}
{4, 2}
{4, 3}
{4, 4}
Run Code Online (Sandbox Code Playgroud)
因此,这两个要求是该对必须是唯一的关系(不能有1,2和2,1),并且它们也不能相同。比较两个数字并查看它们是否相等,可以很容易地做到不一样,但是我对第一个要求有麻烦。
将数组中的所有元素添加到列表中最简单的方法是什么?
例如
List<Byte> l = new ArrayList<Byte>();
//Want to add each element in below array to l
byte[] b = "something".getBytes("UTF-8");
Run Code Online (Sandbox Code Playgroud)
是否有一些实用方法或其他东西可以做到这一点.我尝试使用addAll,但是想要将实际数组添加到集合中.
谢谢.
编辑:
为了澄清,我确实想用byte []来做这件事,因为我最终会将列表转换回byte []并将其提供给MessageDigest.update().这有助于澄清吗?
编辑2:
所以看起来List<Byte>很糟糕; 很坏.如果我基本上添加字节数组(我正在制作一些SALTS和用户信息的哈希)以提供给MessageDigest,那么建议使用什么数据结构?
我有这样的Java地图:
Map<String, Object> data = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)
我正在执行以下操作:
data.put("case_ids", new int[] { 31527 });
Run Code Online (Sandbox Code Playgroud)
其中case_ids是第三方API的属性之一.但是,该API抛出incorrect API request error并建议我使用List对象而不是Array:
data.put("case_ids", new int[] { 31527 });
不是List的专家,有什么建议吗?喜欢data.put("case_ids", new List[] { 31527 });?
编辑:扩展我当前的问题(避免重新发布或类似的问题).如果我为上面放置操作设置了大量值并想要创建已知值列表,该怎么办?我不认为这是一个正确的方法来提及由逗号分隔的值列表,如31527,3152,31529,31530,31531,...等.我宁愿将它存储在某个地方,只需将其作为输入调用 -data.put("case_ids", new int[] { input });.另外,这可能没有文件吗?只是想避免依赖文件.