集合类

1.ArrayMap VS HashMap

  • 底层实现不同
    HashMap 采用数组+链表模式存储数据
    ArrayMap两个数组存储数据,1个数组存储key的hashcode,1个数组存储key,value值

  • 扩容方式不同
    HashMap是new出来一个对象,初始长度是16,按2倍扩容;
    ArrayMap是System.ArrayCopy,效率更高,长度为[1,4),扩容到4;长度为[4,8),扩容到8;大于8,扩容1.5倍;

  • 查找方式不同
    HashMap 是由hashcode的值直接算出index;
    ArrayMap 是二分查找,效率稍慢

  • 是否可收缩
    HashMap 删除元素后无法占用内存无法收缩;
    ArrayMap 删除元素后能够数组收缩,内存利用率更高

  • 结论
    HashMap适用场景:数据量很大时(大于1000)
    ArrayMap适用场景:数据量小(小于8),频繁使用;
    ArrayMap是时间换空间,来达到节约内存的目的

2.数组<-->列表

2.1 array-->list

String[] userid = {"aa","bb","cc"};
List userList = new ArrayList();
Collections.addAll(userList, userid);

String[] userid = {"aa","bb","cc"};
List userList = Arrays.asList(userid);
另:Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。
List list = new ArrayList(Arrays.asList(userid));这样操作就可以了。

2.2list--->array

List strList = new ArrayList();
strList.add("aa");
strList.add("bb");
Object[] objs = strList.toArray();


如果要变成String数组,需要强转类型。
String[] strs = (String[]) strList.toArray(new String[0]);


也可以指定大小:
String[] strs = strList.toArray(new String[strList.size()]);

参考链接

ArrayMap VS HashMap
HashMap和ArrayMap实现原理的区别以及各自优势

你可能感兴趣的:(集合类)