我必须在内存中保留数千个字符串,以便在Java中以串行方式访问.我应该将它们存储在数组中还是应该使用某种List?
由于数组将所有数据保存在连续的内存块中(与Lists不同),使用数组存储数千个字符串会导致问题吗?
如果我clone()在类型A的对象数组上调用方法,它将如何克隆其元素?该副本是否会引用相同的对象?或者它会(element of type A).clone()为每个人打电话吗?
当我运行以下代码时,没有任何东西被复制 - 我做错了什么?
另外,这是将数据从一个数组复制到另一个数组的最佳/最有效的方法吗?
public class A {
public static void main(String args[]) {
int a[] = { 1, 2, 3, 4, 5, 6 };
int b[] = new int[a.length];
for (int i = 0; i < a.length; i++) {
a[i] = b[i];
}
}
}
Run Code Online (Sandbox Code Playgroud) 克隆对象我需要实现'可克隆'接口.因为这里我的类是一个jar文件(我的意思是API).所以我无法编辑课程.我听说所有类都扩展了基础对象类,这个对象类实现了可克隆的接口.这是否意味着我们可以直接克隆对象而不实现接口.如果是这样,在我的日食中,我没有任何克隆对象的选择.有没有其他方法克隆对象而不实现可克隆的接口.请解释.
我试图制作一个数组的独立副本,但无法获得一个.看到我无法使用for循环将整数复制整数,因为效率原因.还有其他方法吗?这是我的代码:
int[] temp = new int[arr.length];
temp = arr;
Run Code Online (Sandbox Code Playgroud) 我一直在尝试测量System.arrayCopy与Arrays.copyOf的性能,以便正确选择其中一个.仅仅为了基准测试我也添加了手动副本,结果让我感到惊讶.显然我错过了一些非常重要的东西,请你,告诉我,它是什么?实现如下(参见前4种方法).
public class ArrayCopy {
public static int[] createArray( int size ) {
int[] array = new int[size];
Random r = new Random();
for ( int i = 0; i < size; i++ ) {
array[i] = r.nextInt();
}
return array;
}
public static int[] copyByArraysCopyOf( int[] array, int size ) {
return Arrays.copyOf( array, array.length + size );
}
public static int[] copyByEnlarge( int[] array, int size ) {
return enlarge( array, size );
}
public static int[] copyManually( …Run Code Online (Sandbox Code Playgroud) 我有一个编写器线程和单个读取器线程来更新和处理数组池(存储在map中的引用).写入与读取的比率几乎为5:1(写入延迟是一个问题).
编写器线程需要根据某些事件更新池中数组的少数元素.整个写操作(所有元素)都需要是原子的.
我想确保读者线程读取先前更新的数组,如果编写器线程正在更新它(类似于易失性但在整个数组而不是单个字段).基本上,我可以负担得起读取陈旧的值,但不能阻止.
此外,由于写入非常频繁,因此在读/写时创建新对象或锁定整个数组会非常昂贵.
是否有更高效的数据结构可以使用或使用更便宜的锁?
简单的问题,在Java中复制双精度数组的最快方法是什么.我目前这样做......
public static double[] clone_doubles(double[] from)
{
double[] to = new double[from.length];
for (int i = 0; i < from.length; i++) to[i] = from[i];
return to;
}
Run Code Online (Sandbox Code Playgroud)
它也进行分配以避免溢出,但如果有更快的方法我将分配与副本分开.
我看过了Arrays.copyOf(),System.arraycopy()但我想知道是否有人有任何巧妙的技巧.
编辑:
如何复制double[][]?
我甚至提到:声纳违规:安全 - 数组直接存储
我的代码是--->
public final void setSelectedObjectsList(final ScheduleDTO[] selectedObjectsList)
// Security - Array is stored directly
//The user-supplied array 'selectedObjectsList' is stored directly.
{
if (selectedObjectsList != null) {
this.selectedObjectsList = selectedObjectsList.clone();
} else {
this.selectedObjectsList = null;
}
}
Run Code Online (Sandbox Code Playgroud)
这已经在处理防御性复制,为什么声纳会在功能参数上对我大吼大叫.
这不像Sonar Violation那样重复 :安全 - 数组直接存储
再次,谢谢你的呐喊和时间.