博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的集合学习笔记--ArrayList
阅读量:6342 次
发布时间:2019-06-22

本文共 2252 字,大约阅读时间需要 7 分钟。

一,ArrayList

实现自己的ArrayList:主要是添加方法,理解自动扩容机制

代码+注释

package com.amazing.jdk.learn2List.list_08_13;            /**      * 1.实现ArrayList接口的增删改查方法      * 2.理解自动扩容机制      *参考:http://blog.csdn.net/u011240877/article/details/52802849      */      public class MyArrayList
{ //需要扩容的数组 transient Object[] elementData; //数组里的元素个数 private int size; public boolean add(E o) { /* 1.先判断一下,不然会报空指针 */ if(elementData==null){ elementData=new Object[]{}; size=0; } /* 2.再判断当数组被元素填满时,扩容 */ if(size==elementData.length){ //3.定义一个数组接收原来数组的元素 Object[] oldData=elementData; //4.扩容1.5倍 int newCapacity=(elementData.length*3)/2; if(newCapacity

 

 注意:elementData是用transient修饰的

先说一下:

transient关键字:一个对象中有些属性不需要被默认序列化,可以用transient关键子修饰。

transient修饰的元素,该元素不会进行jvm默认的序列化。也可以自己完成这个元素的序列化

有两个方法签名可以实现。可以参考ArrayList里的两个方法 :
序列化方法:writeObject(java.io.ObjectOutputStream s),
反序列化方法:readObject(java.io.ObjectInputStream s)

arrayList中的elementData 为什么被这个关键字修饰呢?难道不需要这个属性序列化吗?

其实是这样的,一个arrayList的容量一般是比它的size要大的,比方我的容量是10,但的存进去的值就只有3,也就是size()只有3. 那如果elementData 不被transient修饰的话,就相当于整个容量为10的list全部被序列化了, 那我们知道其实list里面就只有3个有效值,其它都是空的,这样会造成资源浪费。 那怎么做呢?transient就发挥作用了,那个变量修饰为transient,使其不能被序列化。

那有的人会问,那不是那三个有效值也不能序列化了。不是的,arrayList提供了一个方法writeObject

源码:

 

private void writeObject(java.io.ObjectOutputStream s)        throws java.io.IOException{        // Write out element count, and any hidden stuff        int expectedModCount = modCount;        s.defaultWriteObject();        // Write out size as capacity for behavioural compatibility with clone()        s.writeInt(size);        // Write out all elements in the proper order.        for (int i=0; i

 

源码分析:

 

s.defaultWriteObject();        // 默认的属性进行了序列化
// Write out all elements in the proper order.        for (int i=0; i

参考博客:http://blog.csdn.net/qq_18416057/article/details/73136936?locationNum=10&fps=1

如果对序列化和反序列化有疑问,可以看我另一篇博客,对象的序列化和反序列化:http://www.cnblogs.com/inspred/p/7552690.html

 
 

 

转载于:https://www.cnblogs.com/inspred/p/7551853.html

你可能感兴趣的文章
Adobe驳斥Flash过度耗电论 称HTML5更耗电
查看>>
No!No!No! It's not fashion!
查看>>
艰困之道中学到的经验教训
查看>>
互联网生态建设落地五大挑战——保险科技生态建设 ...
查看>>
进行短视频app开发工作时,可以加入它来保护青少年 ...
查看>>
25G DAC无源高速线缆和25G光模块之间的区别
查看>>
乐乐茶完成近2亿元Pre-A轮融资,祥峰投资领投
查看>>
clickhouse修改时区
查看>>
CSS_定位
查看>>
第二十四章:页面导航(六)
查看>>
10 个 Linux 中方便的 Bash 别名
查看>>
全新 DOCKER PALS 计划上线,带给您不一样的参会体验! ...
查看>>
Android开发之自定义View(二)
查看>>
python爬虫之微打赏(scrapy版)
查看>>
自制操作系统Antz day08——实现内核 (中) 扩展内核
查看>>
poj-1056-IMMEDIATE DECODABILITY(字典)
查看>>
区块链应用 | 不知道什么时候起,满世界都在谈区块链的事情
查看>>
小程序爆红 专家:对简单APP是巨大打击
查看>>
FarBox--另类有趣的网站服务【转】
查看>>
在非纯色背景上,叠加背景透明的BUTTON和STATIC_TEXT控件
查看>>