① java map 的长度
Map是一个借口,只有实现他的类才有制定长度的功能,比如HashMap,初始化是16,List也是接口,它的实现类之一arraylist的构造函数有初始化长度的功能
② 如何获取 java hashmap占用内存空间大小
java没有sizeofo,,
我参考 http://topic.csdn.net/t/20060224/20/4575988.html写了一个
public static void main(String[] args){
// 创建1000个HashMap
HashMap strA[] = new HashMap[1000];
long start = 0;
long end = 0;
// 先垃圾回收
System.gc();
start = Runtime.getRuntime().freeMemory();
for(int i = 0; i < 1000; ++i)
strA[i] = new HashMap();
// 快要计算的时,再清理一次
System.gc();
end = Runtime.getRuntime().freeMemory();
System.out.println("一个HashMap对象占内存:" + (start - end)/1000.0);
}
③ Java中HashMap和TreeMap的区别深入理解
HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不专保证元素迭代顺序是属按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equals和hashcode方法
默认初始容量16,加载因子0.75,扩容为旧容量乘2,查找元素快,如果key一样则比较value,如果value不一样,则按照链表结构存储value,就是一个key后面有多个value;
TreeMap:基于红黑二叉树的NavigableMap的实现,线程非安全,不允许null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出