我们有多个线程调用ArrayList上的add(obj) 。 我的理论是,当两个线程同时调用add时,只有两个被添加的对象中的一个真的被添加到ArrayList 。 这是可信的吗? 如果是这样,你怎么解决这个问题? 使用像Vector这样的同步集合?
我想通过属性对ArrayList进行sorting。 这是我的代码… public class FishDB{ public static Object Fish; public ArrayList<Fish> list = new ArrayList<Fish>(); public class Fish{ String name; int length; String LatinName; //etc. public Vis (String name) { this.name = name; } } public FishDB() { Fish fish; fish = new Fish("Shark"); fish.length = 200; fish.LatinName = "Carcharodon Carcharias"; fish = new Fish("Rainbow […]
我有一个function,操纵一个非常大的名单,超过约25万件。 对于大多数这些项目,它只是取代位置x的项目。 但是,其中约5%的人必须将其从名单中删除。 使用LinkedList似乎是避免昂贵的清除的最明显的解决scheme。 然而,自然地,随着时间的推移,索引访问LinkedList变得越来越慢。 这里的成本是几分钟(其中很多)。 在这个LinkedList上使用迭代器也很昂贵,因为我似乎需要一个单独的副本来避免编辑该列表时出现Iterator并发问题。 这里的成本是几分钟。 但是,这里是我的头脑被吹了一下。 如果我更改为一个ArrayList,它几乎立即运行。 对于包含297515个元素的列表,删除11958个元素并修改其他所有内容需要909ms。 我证实,结果列表的大小确实是285557,并且包含我需要的更新信息。 为什么这么快? 我在JDK6中查看了ArrayList的源代码,它似乎正在按照预期使用arraycopy函数。 我很想理解为什么一个ArrayList在这里工作得很好,当常识似乎表明这个任务的数组是一个可怕的想法,需要移动数十万个项目。
我试着用这样的循环 // ArrayList tourists for (Tourist t : tourists) { if (t != null) { t.setId(idForm); } } 但这并不好。 任何人都可以build议我一个更好的解 一些有用的基准做出更好的决定: While循环,For循环和Iterator性能testing
我知道你可以在实例化过程中初始化一个数组,如下所示: String[] names = new String[] {"Ryan", "Julie", "Bob"}; 有没有办法与ArrayList做同样的事情? 或者我必须单独添加内容与array.add() ?
这个转换有什么问题? public int getTheNumber(int[] factors) { ArrayList<Integer> f = new ArrayList(Arrays.asList(factors)); Collections.sort(f); return f.get(0)*f.get(f.size()-1); } 我读完了从数组创buildArrayList中find的解决scheme后,我做了这个。 getTheNumber(…)的第二行(sortinggetTheNumber(…)导致以下exception: 线程“main”中的exceptionjava.lang.ClassCastException:[我无法转换为java.lang.Comparable] 这里有什么问题? 我意识到可以用Arrays.sort()完成Arrays.sort() ,我只是对这个问题感到好奇。
我想知道如何初始化一个整数数组,使其大小和值通过执行我的程序,改变任何build议?
我正在使用ArrayList来存储Strings 。 该程序提示用户一个菜单,并允许用户select一个操作来执行。 这样的操作是将string添加到列表中,打印条目等。我想要做的是创build一个名为removeDuplicates()的方法。 这个方法将searchArrayList并删除任何重复的值。 我想在列表中留下一个重复值的实例。 我也希望这个方法返回删除重复的总数。 我一直在尝试使用嵌套循环来实现这一点,但我一直在遇到麻烦,因为当条目被删除时, ArrayList的索引被改变,事情不能正常工作。 我从概念上知道我需要做什么,但是在代码中实现这个想法时遇到了麻烦。 这是一些伪代码: 从第一个入口开始; 检查列表中的每个后续条目,看它是否与第一个条目匹配; 删除列表中与第一个条目匹配的每个后续条目; 毕竟所有参赛作品已经过检查,转到第二项; 检查列表中的每个条目,看它是否与第二个条目匹配; 删除列表中与第二个条目匹配的每个条目; 重复列表中的条目 这是我迄今为止的代码: public int removeDuplicates() { int duplicates = 0; for ( int i = 0; i < strings.size(); i++ ) { for ( int j = 0; j < strings.size(); j++ ) { if ( i == […]
我试图利用与数组列表foreach循环,但是当我使用它,它给了我错误,但是当我使用正常的循环,它完美的作品,可能是什么问题? 代码在这里: for (Pair p2 : R) { if ((p2.getFirstElm() == p.getSecondElm()) && (p2.getFirstElm() != p2.getSecondElm())) R.add(new Pair (p.getFirstElm(), p2.getSecondElm())); else if ((p2.getSecondElm() == p.getFirstElm()) && (p2.getFirstElm() != p2.getSecondElm())) R.add(new Pair (p2.getFirstElm(), p.getSecondElm())); // else // There are no transitive pairs in R. } 这是不工作的循环,这是工作的那个: for (int i = 0; i < R.size(); i++) { […]
ArrayList的通常构造函数是: ArrayList<?> list = new ArrayList<>(); 但是也有一个重载的构造函数,它的初始容量是一个参数: ArrayList<?> list = new ArrayList<>(20); 为什么创build一个具有初始容量的ArrayList是非常有用的,我们可以随意添加它呢?