Vector类与ArrayList是相似滴,都是实现数组的动态改变(动态数组),不同的是Vector类是同步的而ArrayList类是非同步的。那么何为同步,何为非同步呢???
java中的同步
- 同步
指多个线程在同时要访问某个对象、某个变量。某个方法、某个代码块等等时,保证只有唯一线程访问同步对象(即synchronized修饰的部分)
相关方法说明:
remove()方法 : 移除第一个与其匹配的向量元素。
add()方法 :添加的元素若相同,他们的ID内存地址会指向同一块地方,即事实上是添加了一个指向相同地址的引用变量,当然删除时还是删除第一个与其匹配的元素,即少一个指向这块地址的引用变量。
对ArrayList 对象进行增添,删除操作时。越靠近末尾操作越快。好像压栈样,因为末尾后添加进去,至于栈顶部,操作时当然更快啦。。
ArrayList串行化
概念指的是:将对象储存到介质(文件、内在缓冲区等)中或是以二进制方式通过网络传输
反串行化:是将这些连续的字节(Byte)数据重构成与原始对象状态相同的对象。。。要实现Serializable 接口(它没有什么方法,仅是告诉JVM要进行特殊操作了。)
我的理解:串行化就是将ArrayList对象变成连续字节(Byte)或储存在文件,或写到缓冲区,或用于网络传输(传输的就是字节
流) ----拆散对象的过程
。反之反串行化就是将字节流变回ArrayList对象() ---转配对像的过程
ArrayList 的克隆方法,与别名的区别
ArrayList <String >list = new ArrayList<String> ();
list.add("a");
list.add("b");
list.add("c");
ArrayList<String> temp = (ArrayList)list.clone();
ArrayList <String > samelist = list ;
list 与samelist 是指向一块内存区域ArrayList对象的引用变量,操作任何一个都会改变该对象。
temp 是list 的副本,二者没有影响的关系。。。
Fail-Fast迭代器
迭代器一旦开始对一个ArrayList对象进行迭代,就不能再修改这个ArrayList对象。否则就可能会损害迭代器的完整性。这样的迭代器是“即时错误”(fail-fast)的
ArrayList 类的trimToSize方法--将用于最小化ArrayList对象的实例变量。。以下例来说嘛:
ArrayList<String > list = new ArrayList<String>(10);
list.add("first");
list.add("second");
list.add("third");
list.add("fourth");
此时ArrayList的list 对象只有四个真正的实例变量,size 当然是4但是初始化list对象是分配了10个给list用,那么有6个是null。显然这样肯定浪费了资源。
list.trimToSize() ;
此时因为调用了trimToSize方法,list 的那6个剩余的空间被JVM回收掉了。。。。。。。。。因此我们就说trimToSize方法--用于最小化ArrayList对象的实例变量。。