目前,我在我的Ubuntu 16.04中安装了IntelliJ IDEA 2016.3用于Java编程.我已经通过IntelliJ网站安装了它而不是ppa
.启动后,我会update available
在右下角收到通知,点击update
后会打开IntelliJ IDEA网页,下载最新的IDE tar文件.我知道为了安装它,我需要下载tar文件,解压缩它usr/local
,并从bin文件夹运行idea.sh.即使这样做,当我在Unity Dash中搜索IntelliJ时,我看到旧版2016.3版本的图标,点击它后,它会打开相同的旧版本.
所以我的问题是,如何在Unity Dash中搜索时更新整个现有的IntelliJ平台并将其视为结果?我能否以更新现有插件的方式更新它,并在重新启动IntelliJ时看到它们生效?
我知道Java的Arrays.sort
方法使用MergeSort来排序对象(或对象集合)的数组,因为它是稳定的,而Java使用QuickSort作为基元数组,因为我们不需要稳定性,因为两个相等的整数是无法区分的,即它们的身份不是'无所谓.
我的问题是,在原语的情况下,为什么Java不使用MergeSort的保证O(n log n)时间而是使用QuickSort的平均O(n log n)时间?在这里的一个相关答案的最后一段中,解释说:
对于引用类型,引用对象通常占用的内存比引用数组多得多,这通常无关紧要.但对于原始类型,克隆数组会使内存使用量翻倍.
这是什么意思?克隆引用仍然至少与克隆基元一样昂贵.在基元数组上使用QuickSort(平均O(n log n))而不是MergeSort(保证O(n log n)时间)还有其他原因吗?
我有以下代码抛出ConcurrentModificationException,因为我在同一个列表中使用两个不同的迭代器,其中一个正在修改列表.因此,第二个迭代器在读取列表时抛出异常,因为其他迭代器已经修改了列表.
List<Integer> list = new ArrayList<>();
populate(list);//A method that adds integers to list
ListIterator<Integer> iterator1 = list.listIterator();
ListIterator<Integer> iterator2 = list.listIterator();
while (iterator1.hasNext()) {
if(iterator1.next() < 5)
iterator1.remove();
}
while (iterator2.hasNext()){
if(iterator2.next() < 5) {
//Call handler
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果它还没有到达一个尚未被删除的元素,那么内部如何iterator2
知道has已被其他迭代器修改过?怎么弄清楚其他一些人已经改变了?一种方法可能是跟踪大小,但这不是原因,因为其他迭代器可以只替换任何元素.list
iterator1
iterator
list
java collections exception concurrentmodification listiterator
java ×3
arrays ×1
collections ×1
exception ×1
linux ×1
listiterator ×1
mergesort ×1
quicksort ×1
sorting ×1
ubuntu-16.04 ×1