在什么情况下,一个不同步的集合,比如一个ArrayList,会导致问题?我想不出任何问题,有人可以给我一个例子,其中ArrayList导致问题而Vector解决了吗?我写了一个程序,有2个线程都修改了一个元素的arraylist.一个线程将"bbb"放入arraylist,而另一个线程将"aaa"放入arraylist.我真的没有看到字符串被修改一半的实例,我在这里是正确的轨道?
另外,我记得我被告知多个线程并没有真正同时运行,一个线程运行一段时间,另一个线程运行(在具有单个CPU的计算机上).如果这是正确的,两个线程怎么可能同时访问相同的数据?也许线程1将在修改内容时停止,线程2将被启动?
提前谢谢了.
所以我有:
ArrayList<ArrayList<String>>
Run Code Online (Sandbox Code Playgroud)
其中包含x个包含另外y个字符串的ArrayLists.演示:
Index 0:
String 1
String 2
String 3
Index 1:
String 4
Index 2:
Index 3:
String 5
String 6
Run Code Online (Sandbox Code Playgroud)
其中index是指包含字符串的数组索引.
如何将其转换为2D数组,如下所示:
{{String1, String2, String3},{String4}, {}, {String5, String6}}
Run Code Online (Sandbox Code Playgroud)
非常感谢.
如果我有:ArrayList<Double> m = new ArrayList<Double>();
使用里面的double值,我该如何添加所有ArrayList元素?
public double incassoMargherita()
{
double sum = 0;
for(int i = 0; i < m.size(); i++)
{
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
如?
如果我没弄错的话,ArrayList包含存储位置的值,在这些位置中存储了你添加到List中的变量.所以,我的假设是,当你调用ArrayList.clear()方法时,它只释放上述值(内存位置)但不释放这些内存位置本身.我将尝试用一个例子来说明这一点:
假设您已拥有内存的当前状态:
[Memory location] (type of variable) *value*
[1000] (int) 32
[1002] (int) 12
[1003] (float) 2.5
Run Code Online (Sandbox Code Playgroud)
然后将它们添加到列表myList中,因此它包含指向1000,1002,1003内存位置的指针.
当您调用myList.clear()时,指针将无效,但内存位置1000,1002,1003仍将包含先前给定的值.我错了吗?
如何从ArrayList中删除特定对象?假设我有一个如下课程:
import java.util.ArrayList;
public class ArrayTest {
int i;
public static void main(String args[]){
ArrayList<ArrayTest> test=new ArrayList<ArrayTest>();
ArrayTest obj;
obj=new ArrayTest(1);
test.add(obj);
obj=new ArrayTest(2);
test.add(obj);
obj=new ArrayTest(3);
test.add(obj);
}
public ArrayTest(int i){
this.i=i;
}
}
Run Code Online (Sandbox Code Playgroud)
如何new ArrayTest(1)从我的删除对象ArrayList<ArrayList>
ExecutorService pool=Executors.newFixedThreadPool(7);
List<Future<Hotel>> future=new ArrayList<Future<Hotel>>();
List<Callable<Hotel>> callList = new ArrayList<Callable<Hotel>>();
for(int i=0;i<=diff;i++){
String str="2013-"+(liDates.get(i).get(Calendar.MONTH)+1)+"-"+liDates.get(i).get(Calendar.DATE);
callList.add(new HotelCheapestFare(str));
}
future=pool.invokeAll(callList);
for(int i=0;i<=future.size();i++){
System.out.println("name is:"+future.get(i).get().getName());
}
Run Code Online (Sandbox Code Playgroud)
现在我想invokeAll在进入for循环之前将pool放到所有任务中,但是当我运行这个程序for循环时,在此之前执行invokeAll并抛出此异常:
java.util.concurrent.ExecutionException: java.lang.NullPointerException at
java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source) at
java.util.concurrent.FutureTask.get(Unknown Source) at
com.mmt.freedom.cheapestfare.TestHotel.main(TestHotel.java:6??5)
Caused by: java.lang.NullPointerException at
com.mmt.freedom.cheapestfare.HotelCheapestFare.getHotelCheap?estFare(HotelCheapes??tFare.java:166)
at com.mmt.freedom.cheapestfare.HotelCheapestFare.call(HotelChe??apestFare.java:219)
at com.mmt.freedom.cheapestfare.HotelCheapestFare.call(HotelChe??apestFare.java:1)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) atjava.util.concurrent.ThreadPoolExecutor$Worker.run(Unknow??n Source)
at java.lang.Thread.run
Run Code Online (Sandbox Code Playgroud) 我正在ArrayList使用for循环迭代,但我不知道如何获取循环所在的当前索引.
我做谷歌,但我找不到任何有用的东西.
如果有人能告诉我如何获得当前指数,我将不胜感激.
我的Android应用程序中有一个ArrayList,它有2个项目.但是,它的大小方法返回3.我知道它听起来真的很简单和愚蠢,但这是如何:

为什么会这样?ArrayList的大小如何返回错误的数字?当我迭代列表时,这会导致空指针异常.
有没有简单的方法将Java ArrayList转换为Kotlin数组?以下代码:
fun test(): Array<String> {
val elems = ArrayList<String>()
return elems.toArray()
}
Run Code Online (Sandbox Code Playgroud)
给出错误:
main.kt:2:15: error: unresolved reference: ArrayList
val elems = ArrayList<String>()
^
Run Code Online (Sandbox Code Playgroud)
我正在解析一些JSON并且不知道我最终会有多少元素,但是一旦我读完它们,我就不需要以任何方式修改数据了所以我想我会选择Kotlin数组作为数据类型.