自娱自乐,不喜莫喷。目前还是大三狗,错误很多,望大神指正。
看同学java一用到list全部是ArrayList,但是ArrayList真的万能吗?顾名思义Array==数组,添加,删除肯定要有扩张,收缩操作,会拖慢性能,对于常读的自然没关系,但是有时做信息缓冲区时,添加、删除频繁,ArrayList肯定不好。
先看结果:
不带index的添加:新建ArrayList时数组大小为0;第一次添加时新建一个大小为10的数组,以后不够用时,每次扩大一半,即:10,15,22。。。每逢这些大小,就重建数组然后把源数据拷过来,这是非常不符合缓冲区的要求的。
带index的添加:数组空间不够时即:数组大小为10,15,22。。。时先做一次扩张操作,然后再拷贝一次以完成在目标位置添加,拷贝操作最少一次,最多两次。。。喵喵喵???
java.util.concurrent下有许多集合类,你们可以自己看看,我找到的比较好用的:
ArrayList:数组实现,随机查找,随机读操作非常快,写。。。
LinkedList:链表实现,可以快速增删,顺序读取,缺点时随机读取慢,得遍历一遍,单线程时做缓冲区最适合不过
HashSet:没有重复的无序集合(插入重复元素不会理你)
TreeSet:有序集合(红黑树实现)
HashMap:最常用的map类: transient Node<K,V>[] table; 也是数组实现
linkedHashMap:顾名思义,HashMap的链表实现
weakHashMap:不会增加对象的引用计数,所以gc回收时不会考虑它里面的引用
多线程:java.util.concurrent包下有许多多线程支持的工具,不需要自己加锁来控制哦,自带锁机制ÿ