在这个问题中如何在C++ 11中有效地选择标准库容器?是一个在选择C++集合时使用的方便流程图.
我认为这对于那些不确定他们应该使用哪个集合的人来说是一个有用的资源,所以我试图找到类似Java的流程图而无法这样做.
什么资源和"备忘单"可以帮助人们选择在Java编程时使用的正确的集合?人们如何知道应该使用哪些List,Set和Map实现?
如果您有一个扩展了的数组列表(数组已增长)以包含许多元素,然后又删除了这些元素,那么实际的数组大小是否会更改以节省内存?
更详细地,当从大数组列表中删除一个元素时,是否恢复了数组中数组空部分的保留内存?从逻辑上讲,由于我们扩展了数组,因此我们可能需要使用此空间,因此不会被触及。
但是,如果我们有一个非常大的数组列表,并且仅使用前10个左右的元素,那么编译器(或在运行时)是否会意识到所有多余的空间都在浪费并且可以恢复?(会减小实际的数组大小吗?(将元素复制到较小的数组中吗?))
对于add()方法,实现使得elementData\[\]数组的大小根据需要增长.但是,查看该remove()方法时,它不会随着元素的移除而缩小尺寸.
我使用一个简单的代码测试,并elementData[]开始10和增长.但是,当我使用remove()方法删除所有元素elementData[]时,在我完成添加所有元素的位置停留的大小.
int testSize = 10000000;
ArrayList<Integer> alist = new ArrayList<Integer>();
// size of elementData[] is 10
for(int i = 0; i < testSize; i++) {
alist.add(i);
}
// size of elementData[] is 13845150
for(int i = alist.size()-1; i >= 0; i--) {
alist.remove(i);
}
// size of elementData[] remains at 13845150
Run Code Online (Sandbox Code Playgroud)
这不是浪费记忆吗?
我已经读过,当我们删除一个Objectfrom时ArrayList,它的大小不会减少.
我尝试了下面的代码来测试它,但发现大小减少了.任何人都可以纠正或向我解释这个吗?
package collections;
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
//Creating list of Books
List<Book> list=new ArrayList<Book>();
//Creating Books
Book b1=new Book(101,"Let us C","Yashwant Kanetkar","BPB",8);
Book b2=new Book(102,"Data Communications & Networking","Forouzan","Mc Graw Hill",4);
Book b3=new Book(103,"Operating System","Galvin","Wiley",6);
//Adding Books to list
list.clear();
list.add(b1);
list.add(b2);
list.add(b3);
list.contains(b3);
int size= list.size();
System.out.println(size);
list.remove(b3);
int size1= list.size();
System.out.println(size1);
}
}
Run Code Online (Sandbox Code Playgroud)