rip*_*234 24 java collections list
遗憾的是这不起作用:
long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);
Run Code Online (Sandbox Code Playgroud)
除了手动添加它们之外还有更好的方法吗?
Boz*_*zho 43
使用apache commons-lang中的ArrayUtils
long[] longs = new long[]{1L};
Long[] longObjects = ArrayUtils.toObject(longs);
List<Long> longList = java.util.Arrays.asList(longObjects);
Run Code Online (Sandbox Code Playgroud)
Esk*_*sko 12
由于其他人建议使用外部库,这里是Google Guava库的方式:
long[] longs = {1L, 2L, 3L};
List<Long> longList = com.google.common.primitives.Longs.asList(longs);
Run Code Online (Sandbox Code Playgroud)
您可以通过实施AbstractList静态工厂来避免复制.列表的所有更改都会写入数组,反之亦然.
在某处创建此方法.
public static List<Long> asList(final long[] l) {
return new AbstractList<Long>() {
public Long get(int i) {return l[i];}
// throws NPE if val == null
public Long set(int i, Long val) {
Long oldVal = l[i];
l[i] = val;
return oldVal;
}
public int size() { return l.length;}
};
}
Run Code Online (Sandbox Code Playgroud)
然后只需调用此方法即可创建数组.您将需要使用接口List而不是ArrayList声明中的实现.
long[] longs = new long[]{1L, 2L, 3L};
List<Long> longArray = asList(longs);
Run Code Online (Sandbox Code Playgroud)
我从语言指南中学到了这种技巧.
注意使用java.lang.Long,而不是long
final Long[] longs = new Long[]{1L};
final List<Long> longArray = Arrays.asList(longs);
Run Code Online (Sandbox Code Playgroud)
不添加任何第三方依赖项.