????????上一次学习,我们主要了解了ArrayList和LinkList的主要区别,可是我们对他们的主要代码,还不够了解,所以今天,我们主要来讲ArrayList的主要代码思想
????????1.ArrayList将保持基础数组,数组的容量,以及存储在ArrayList中的当前项数。
????????2.ArrayList将提供一种机智以改变基础数组的容量。通过获得一个新的数组,将原数组拷贝到新数组中来改变数组的容量
????????3.ArrayList将提供get和set方法的实现
????????4.ArrayList将提供基本的例程,比如size()、isEmpty和clear,它们是典型的单行程序;还提供remove,以及两种不同版本的add。如果数组的大小和容量相同,那么两个add例程将增加容量。其中,通过上一次学习,我们知道给数组添加长度,其实是很耗费资源的,每次添加末尾,如果超出原数组长度,都得要重新扩充数组大小。
????????与其扩充的耗费资源,这个问题解决不了,那就换个思路想:
? ? ? ? 我们减少扩充次数,那么我们怎么操作,没错了,就是符合扩充条件的时候,我们就一次性干脆多扩充几个大小,不再是所谓的扩充1个长度,而是扩充5个长度,甚至扩充10个长度。
????????5.ArrayList将提供一个实现Iterator接口的类。这个类将存储迭代序列中的下一项的下标,并提供next、hasNext和remove等方法的实现。ArrayList的迭代器方法将直接返回实现Iterator接口的该类的新构造实例。
public static void main(String[] args) throws IllegalAccessException {
//构造方法
System.out.println("===================构造方法========================");
Constructor c[] = ArrayList.class.getDeclaredConstructors();
for(int i=0 ; i<c.length ; i++){
Constructor c1 = c[i];
System.out.println(c1.getName());
System.out.println("构造方法中是否有可变的参数:"+c1.isVarArgs());
Class cc[] = c1.getParameterTypes();
System.out.print("构造方法中的参数有:");
for(int j=0 ; j< cc.length ; j++){
System.out.print(cc[j]+" ");
}
System.out.println("\n=======================================================");
}
//成员变量
System.out.println();
System.out.println("===================成员变量========================");
Field[] f = ArrayList.class.getDeclaredFields();
for(int i=0 ; i<f.length ; i++){
Field f1 = f[i];
System.out.println("成员变量的名称:"+f1.getName());
System.out.println("成员变量的权限:"+f1.getModifiers());
System.out.println("成员变量的数据类型:"+f1.getAnnotatedType());
System.out.println("=======================================================");
}
//成员方法
System.out.println();
System.out.println("===================成员方法========================");
Method m[] = ArrayList.class.getDeclaredMethods();
for(int i=0 ; i<m.length ; i++){
Method m1 = m[i];
System.out.println("方法的名字:"+m1.getName());
System.out.println("方法的权限:"+m1.getModifiers());
System.out.println("方法的返回值:"+m1.getReturnType());
System.out.println("方法的参数中是否有可变参数:"+m1.isVarArgs());
System.out.print("方法的参数内容有:");
Class cc[] = m1.getParameterTypes();
for(int j=0 ; j<cc.length ; j++){
System.out.print(cc[j]+" ");
}
System.out.println("\n=======================================================");
}
}
????????下面通过上面的(反射)代码,将ArrayList类代码的大致情况展示出来,当然也是可以通过快捷键显示的(嘻嘻)
F:\JAVA.JDK\jdk-13.0.2_windows-x64_bin\bin\java.exe "-javaagent:F:\JAVA.SOFT\IDEA2.0 (JAVA)\IntelliJ IDEA Community Edition 2020.3\lib\idea_rt.jar=58029:F:\JAVA.SOFT\IDEA2.0 (JAVA)\IntelliJ IDEA Community Edition 2020.3\bin" -Dfile.encoding=UTF-8 -classpath H:\数据结构与算法.workspace\out\production\数据结构与算法.workspace ArrayList.MyArrayList
===================构造方法========================
java.util.ArrayList
构造方法中是否有可变的参数:false
构造方法中的参数有:int
=======================================================
java.util.ArrayList
构造方法中是否有可变的参数:false
构造方法中的参数有:interface java.util.Collection
=======================================================
java.util.ArrayList
构造方法中是否有可变的参数:false
构造方法中的参数有:
=======================================================
===================成员变量========================
成员变量的名称:serialVersionUID
成员变量的权限:26
成员变量的数据类型:long
=======================================================
成员变量的名称:DEFAULT_CAPACITY
成员变量的权限:26
成员变量的数据类型:int
=======================================================
成员变量的名称:EMPTY_ELEMENTDATA
成员变量的权限:26
成员变量的数据类型:java.lang.Object[]
=======================================================
成员变量的名称:DEFAULTCAPACITY_EMPTY_ELEMENTDATA
成员变量的权限:26
成员变量的数据类型:java.lang.Object[]
=======================================================
成员变量的名称:elementData
成员变量的权限:128
成员变量的数据类型:java.lang.Object[]
=======================================================
成员变量的名称:size
成员变量的权限:2
成员变量的数据类型:int
=======================================================
===================成员方法========================
方法的名字:removeRange
方法的权限:4
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:int int
=======================================================
方法的名字:rangeCheckForAdd
方法的权限:2
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:outOfBoundsMsg
方法的权限:10
方法的返回值:class java.lang.String
方法的参数中是否有可变参数:false
方法的参数内容有:int int
=======================================================
方法的名字:outOfBoundsMsg
方法的权限:2
方法的返回值:class java.lang.String
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:add
方法的权限:1
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:int class java.lang.Object
=======================================================
方法的名字:add
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:class java.lang.Object
=======================================================
方法的名字:add
方法的权限:2
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:class java.lang.Object class [Ljava.lang.Object; int
=======================================================
方法的名字:remove
方法的权限:1
方法的返回值:class java.lang.Object
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:remove
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:class java.lang.Object
=======================================================
方法的名字:get
方法的权限:1
方法的返回值:class java.lang.Object
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:equals
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:class java.lang.Object
=======================================================
方法的名字:hashCode
方法的权限:1
方法的返回值:int
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:clone
方法的权限:1
方法的返回值:class java.lang.Object
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:indexOf
方法的权限:1
方法的返回值:int
方法的参数中是否有可变参数:false
方法的参数内容有:class java.lang.Object
=======================================================
方法的名字:clear
方法的权限:1
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:lastIndexOf
方法的权限:1
方法的返回值:int
方法的参数中是否有可变参数:false
方法的参数内容有:class java.lang.Object
=======================================================
方法的名字:isEmpty
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:replaceAll
方法的权限:1
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.function.UnaryOperator
=======================================================
方法的名字:size
方法的权限:1
方法的返回值:int
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:subList
方法的权限:1
方法的返回值:interface java.util.List
方法的参数中是否有可变参数:false
方法的参数内容有:int int
=======================================================
方法的名字:toArray
方法的权限:1
方法的返回值:class [Ljava.lang.Object;
方法的参数中是否有可变参数:false
方法的参数内容有:class [Ljava.lang.Object;
=======================================================
方法的名字:toArray
方法的权限:1
方法的返回值:class [Ljava.lang.Object;
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:iterator
方法的权限:1
方法的返回值:interface java.util.Iterator
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:contains
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:class java.lang.Object
=======================================================
方法的名字:spliterator
方法的权限:1
方法的返回值:interface java.util.Spliterator
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:addAll
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.Collection
=======================================================
方法的名字:addAll
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:int interface java.util.Collection
=======================================================
方法的名字:set
方法的权限:1
方法的返回值:class java.lang.Object
方法的参数中是否有可变参数:false
方法的参数内容有:int class java.lang.Object
=======================================================
方法的名字:readObject
方法的权限:2
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:class java.io.ObjectInputStream
=======================================================
方法的名字:writeObject
方法的权限:2
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:class java.io.ObjectOutputStream
=======================================================
方法的名字:forEach
方法的权限:1
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.function.Consumer
=======================================================
方法的名字:ensureCapacity
方法的权限:1
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:trimToSize
方法的权限:1
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:retainAll
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.Collection
=======================================================
方法的名字:removeAll
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.Collection
=======================================================
方法的名字:removeIf
方法的权限:1
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.function.Predicate
=======================================================
方法的名字:removeIf
方法的权限:0
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.function.Predicate int int
=======================================================
方法的名字:checkInvariants
方法的权限:0
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:sort
方法的权限:1
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.Comparator
=======================================================
方法的名字:listIterator
方法的权限:1
方法的返回值:interface java.util.ListIterator
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:listIterator
方法的权限:1
方法的返回值:interface java.util.ListIterator
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:elementData
方法的权限:0
方法的返回值:class java.lang.Object
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:grow
方法的权限:2
方法的返回值:class [Ljava.lang.Object;
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:grow
方法的权限:2
方法的返回值:class [Ljava.lang.Object;
方法的参数中是否有可变参数:false
方法的参数内容有:
=======================================================
方法的名字:indexOfRange
方法的权限:0
方法的返回值:int
方法的参数中是否有可变参数:false
方法的参数内容有:class java.lang.Object int int
=======================================================
方法的名字:lastIndexOfRange
方法的权限:0
方法的返回值:int
方法的参数中是否有可变参数:false
方法的参数内容有:class java.lang.Object int int
=======================================================
方法的名字:fastRemove
方法的权限:2
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:class [Ljava.lang.Object; int
=======================================================
方法的名字:equalsArrayList
方法的权限:2
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:class java.util.ArrayList
=======================================================
方法的名字:equalsRange
方法的权限:0
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.List int int
=======================================================
方法的名字:checkForComodification
方法的权限:2
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:hashCodeRange
方法的权限:0
方法的返回值:int
方法的参数中是否有可变参数:false
方法的参数内容有:int int
=======================================================
方法的名字:shiftTailOverGap
方法的权限:2
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:class [Ljava.lang.Object; int int
=======================================================
方法的名字:batchRemove
方法的权限:0
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.Collection boolean int int
=======================================================
方法的名字:elementAt
方法的权限:8
方法的返回值:class java.lang.Object
方法的参数中是否有可变参数:false
方法的参数内容有:class [Ljava.lang.Object; int
=======================================================
方法的名字:nBits
方法的权限:10
方法的返回值:class [J
方法的参数中是否有可变参数:false
方法的参数内容有:int
=======================================================
方法的名字:setBit
方法的权限:10
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:class [J int
=======================================================
方法的名字:isClear
方法的权限:10
方法的返回值:boolean
方法的参数中是否有可变参数:false
方法的参数内容有:class [J int
=======================================================
方法的名字:replaceAllRange
方法的权限:2
方法的返回值:void
方法的参数中是否有可变参数:false
方法的参数内容有:interface java.util.function.UnaryOperator int int
=======================================================
进程已结束,退出代码为 0
|