zoukankan      html  css  js  c++  java
  • 集合ArrayList与list的本质

    package com.temp;

    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.ListIterator;

    public class Tmp {

    public static void main (String[] args)throws Exception {

    //源代码是不能直接查看的,ctrl点击进入的是一个字节码的文件
    //把jdk文件里面的src.zip文件导入才能查看到源代码

    //问题一:数组是如何扩展的?
    //可变数组长度
    //初始值(未add的时候)为空
    //add以后为默认长度
    //
    //问题二:数组的默认长度是多少?
    //arraylist默认的长度是10

    //问题三:(增长因子数)当长度为10的时候,增长的方式是如何的??如何自增的
    //每当数组长度超过的时候就会以0.5倍自增(增长因子数为0.5倍)
    //向下取整数
    // ArrayList arr=new ArrayList();
    // arr.add("a");
    // arr.add("b");
    // arr.add("c");
    // arr.add("d");
    // arr.add("e");
    // arr.add("f");
    // System.out.println(arr.size());
    // System.out.println("---------下标输出方式");
    // //下标输出方式
    // for(int i=0;i<arr.size();i++) {
    // System.out.println(arr.get(i));
    // }
    // System.out.println("---------foreach输出(需要jdk>=1.5)");
    // //foreach输出(需要jdk>=1.5)
    // //集合中的某一个元素
    // //如果jdk<1.5就会报错
    // for(Object o:arr) {
    // System.out.println(o);
    // }
    // System.out.println("---------jdk1.8的语法糖");
    // //jdk1.8的语法糖
    // //arr.forEach(x->System.out.println(x));
    // //x等同于foreach的一个对象
    // //命名自定义
    //
    // System.out.println("---------迭代器");
    // //迭代器
    // Iterator it=arr.iterator();
    // while(it.hasNext()) {
    // System.out.println(it.next());
    // }

    // ArrayList arr=new ArrayList(5);
    // for(int i=0;i<30;i++) {
    // print(arr);
    // arr.add(i);
    // }
    ArrayList arr=new ArrayList(5);
    arr.add("a");
    arr.add("b");
    arr.add("c");
    arr.add("d");
    arr.add("e");
    ListIterator list=arr.listIterator();
    //只能先向下读取再向上读取。否则就会出项只有向下读取有值,向上读取没有值
    System.out.println("----------下");
    //向下读取
    while(list.hasNext()) {
    System.out.println(list.next());
    }
    System.out.println("----------上");
    //向上读取
    while(list.hasPrevious()) {
    System.out.println(list.previous());
    }
    //栈 是一个车厢 最大的容量是3M
    //堆 是一个火车 将内存中的零散空间组成的一张链式表格

    }

    //使用反射查看属性
    //反射(反编译过程)
    //java源文件到字节码为编译过程
    //从字节码文件到Java源文件为反编译过程(反射)
    static void print(ArrayList arraylist)throws Exception{
    Class c=arraylist.getClass();
    Field elementdateDField=c.getDeclaredField("elementData");
    elementdateDField.setAccessible(true);//不可访问的,要设置为true
    Object[] arr=(Object[])elementdateDField.get(arraylist);
    System.out.println("elementdateDField.length="+arr.length);
    }






    }

  • 相关阅读:
    Django基础二之URL路由系统
    Django基础一之web框架的本质
    HTTP协议超级详解
    动态规划-背包问题
    java 中对象比较大小
    排序算法
    泛型
    打jar包和使用jar包
    Mongodb中Sharding集群
    linux时间同步,ntpd、ntpdate
  • 原文地址:https://www.cnblogs.com/hyfl/p/10885261.html
Copyright © 2011-2022 走看看