标签: arraylist

如何使我的ArrayList线程安全?Java中另一种解决问题的方法?

我有一个ArrayList,我想用它来保存RaceCar对象,一旦完成执行就会扩展Thread类.一个名为Race的类使用RaceCar对象在完成执行时调用的回调方法处理此ArrayList.回调方法addFinisher(RaceCar finisher)将RaceCar对象添加到ArrayList.这应该给出Threads完成执行的顺序.

我知道ArrayList不是同步的,因此不是线程安全的.我尝试使用Collections.synchronizedCollection(c Collection)方法,传入一个新的ArrayList并将返回的Collection分配给ArrayList.但是,这给了我一个编译器错误:

Race.java:41: incompatible types
found   : java.util.Collection
required: java.util.ArrayList
finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));
Run Code Online (Sandbox Code Playgroud)

这是相关代码:

public class Race implements RaceListener {
    private Thread[] racers;
    private ArrayList finishingOrder;

    //Make an ArrayList to hold RaceCar objects to determine winners
    finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));

    //Fill array with RaceCar objects
    for(int i=0; i<numberOfRaceCars; i++) {
    racers[i] = new RaceCar(laps, inputs[i]);

        //Add this as a RaceListener to each RaceCar
        ((RaceCar) racers[i]).addRaceListener(this);
    }

    //Implement the one method in the RaceListener interface
    public void addFinisher(RaceCar …
Run Code Online (Sandbox Code Playgroud)

java collections multithreading synchronization arraylist

82
推荐指数
5
解决办法
16万
查看次数

Java:如何读取文本文件

我想读取包含空格分隔值的文本文件.值是整数.如何阅读并将其放入数组列表?

以下是文本文件内容的示例:

1 62 4 55 5 6 77
Run Code Online (Sandbox Code Playgroud)

我想把它放在一个arraylist中[1, 62, 4, 55, 5, 6, 77].我怎么能用Java做呢?

java file-io arraylist text-files

81
推荐指数
5
解决办法
50万
查看次数

将数组转换为ArrayList

我在将数组转换为ArrayListJava时遇到了很多麻烦.这是我现在的阵列:

Card[] hand = new Card[2];
Run Code Online (Sandbox Code Playgroud)

"手"拥有一系列"卡片".这看起来像是ArrayList什么样的?

java arrays list arraylist blackjack

80
推荐指数
3
解决办法
13万
查看次数

为什么处理排序数组*比未排序数组慢?(Java的ArrayList.indexOf)

标题是参考为什么处理排序数组比未排序数组更快?

这也是分支预测效果吗?注意:这里对排序数组的处理速度较慢 !!

请考虑以下代码:

private static final int LIST_LENGTH = 1000 * 1000;
private static final long SLOW_ITERATION_MILLIS = 1000L * 10L;

@Test
public void testBinarySearch() {
    Random r = new Random(0);
    List<Double> list = new ArrayList<>(LIST_LENGTH);
    for (int i = 0; i < LIST_LENGTH; i++) {
        list.add(r.nextDouble());
    }
    //Collections.sort(list);
    // remove possible artifacts due to the sorting call
    // and rebuild the list from scratch:
    list = new ArrayList<>(list);

    int nIterations = 0;
    long startTime = System.currentTimeMillis(); …
Run Code Online (Sandbox Code Playgroud)

java performance arraylist

80
推荐指数
3
解决办法
3917
查看次数

如何计算两个ArrayLists之间的差异?

我有两个ArrayLists.

ArrayList A包含

['2009-05-18','2009-05-19','2009-05-21']
Run Code Online (Sandbox Code Playgroud)

ArrayList B包含 ['2009-05-18','2009-05-18','2009-05-19','2009-05-19','2009-05-20','2009-05-21','2009-05-21','2009-05-22']

我必须比较ArrayLst A和ArrayLst B. 结果ArrayList应该包含ArrayList中不存在的List .AllList结果应该是

[ '2009-05-20', '2009-05-22']

怎么比较?

java arraylist

79
推荐指数
6
解决办法
13万
查看次数

通过Intent传递ArrayList

我试图使用意图将arrayList传递给另一个活动.这是第一个活动中的代码.

case R.id.editButton:
        Toast.makeText(this, "edit was clicked", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(this, editList.class);
        intent.putStringArrayListExtra("stock_list", stock_list);
        startActivity(intent);
        break;
Run Code Online (Sandbox Code Playgroud)

这是我尝试在第二个活动中检索列表的地方.这里有问题吗?

Intent i = new Intent(); //This should be getIntent();
    stock_list = new ArrayList<String>();

    stock_list = i.getStringArrayListExtra("stock_list");
Run Code Online (Sandbox Code Playgroud)

android arraylist android-intent

79
推荐指数
4
解决办法
11万
查看次数

在ArrayList中查找项目索引的更好方法是什么?

对于Android应用,我有以下功能

private ArrayList<String> _categories; // eg ["horses","camels"[,etc]]

private int getCategoryPos(String category) {
    for(int i = 0; i < this._categories.size(); ++i) {
        if(this._categories.get(i) == category) return i;
    }

    return -1;
}
Run Code Online (Sandbox Code Playgroud)

这是编写函数获取元素位置的"最佳"方法吗?或者我应该利用java中的一个奇特的shmancy本机函数?

java for-loop arraylist

79
推荐指数
3
解决办法
24万
查看次数

列出<String>到ArrayList <String>转换问题

我有一个以下方法......它实际上采用句子列表并将每个句子分成单词.就这个:

public List<String> getWords(List<String> strSentences){
allWords = new ArrayList<String>();
    Iterator<String> itrTemp = strSentences.iterator();
    while(itrTemp.hasNext()){
        String strTemp = itrTemp.next();
        allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+"));          
    }
    return allWords;
}
Run Code Online (Sandbox Code Playgroud)

我必须以下列格式将此列表传递给散列映射

HashMap<String, ArrayList<String>>
Run Code Online (Sandbox Code Playgroud)

所以这个方法返回List,我需要一个arrayList?如果我试图施展它不锻炼...任何建议?

另外,如果我在一个HashMap中将ArrayList更改为List,我得到了

java.lang.UnsupportedOperationException
Run Code Online (Sandbox Code Playgroud)

因为我的代码中有这一行

sentenceList.add(((Element)sentenceNodeList.item(sentenceIndex)).getTextContent());
Run Code Online (Sandbox Code Playgroud)

有更好的建议吗?

java list arraylist

79
推荐指数
5
解决办法
19万
查看次数

这个布尔"(数字&1)== 0"是什么意思?

在CodeReview上,我发布了一段代码,并询问了改进它的提示.我得到的是使用布尔方法来检查ArrayList是否具有偶数个索引(这是必需的).这是建议的代码:

private static boolean isEven(int number)
{
    return (number & 1) == 0;
}
Run Code Online (Sandbox Code Playgroud)

由于我已经为那个特定的用户提供了很多帮助,我已经决定是时候纠缠SO社区了!我真的不明白这是如何工作的.调用该方法并将ArrayList的大小作为参数(即ArrayList具有十个元素,数字= 10).

我知道一个单独&运行数字和1的比较,但在那之后我迷路了.

我读它的方式,就是说,如果number == 0和,则返回true 1 == 0.我知道第一个不是真的,后者显然没有意义.有人可以帮帮我吗?

编辑:我应该添加代码确实有效,万一有人想知道.

java methods int boolean arraylist

76
推荐指数
5
解决办法
7556
查看次数

动态分配的阵列的理想增长率是多少?

C++有std :: vector,Java有ArrayList,许多其他语言都有自己的动态分配数组.当动态数组空间不足时,它会重新分配到更大的区域,旧值将被复制到新数组中.这种阵列性能的核心问题是阵列的大小增长速度.如果你总是只能变得足够大以适应当前的推动,那么你每次都会重新分配.因此,将数组大小加倍,或将其乘以1.5倍是有意义的.

有理想的生长因子吗?2倍?1.5倍?理想上,我的意思是数学上合理,最佳平衡性能和浪费的记忆.理论上,我认识到,鉴于您的应用程序可能具有任何可能的推送分布,这在某种程度上取决于应用程序.但我很想知道是否有一个"通常"最好的值,或者在一些严格的约束条件下被认为是最好的.

我听说有一篇关于这个的文章,但我一直都找不到.

arrays math vector arraylist dynamic-arrays

75
推荐指数
8
解决办法
2万
查看次数