zoukankan      html  css  js  c++  java
  • Java 面试题 —— java 源码

    1. 静态工厂方法

    静态工厂方法不必在每次调用它们的时候都创建一个新的对象;

    • Boolean.valueOf(boolean):

      public final class Boolean {
          public static final Boolean TRUE = new Boolean(true);
          public static final Boolean FALSE = new Boolean(false);
          public static Boolean valueOf(boolean b) {
                  return (b ? TRUE : FALSE);
          }
      }

    2. ArrayList 长度的动态拓展

    • 构造函数:

      // 底层数据结构,定长数组
      private transient Object[] elementData;
      
      public ArrayList(int initialCapacity) {
              super();
              if (initialCapacity < 0)
                  throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);
              this.elementData = new Object[initialCapacity];//属性指向新建长度为初始容量的临时数组
      }
      
      // 使用初始容量10构造一个空列表
      public ArrayList() {
          this(10);
      }
      
      / *构造包含利用collection的迭代器按顺序返回的指定collection元素的列表
       * @param c 集合,它的元素被用来放入列表t
       * @throws NullPointerException 如果指定集合为 null
       */
      public ArrayList(Collection<? extends E> c) {
          elementData = c.toArray(); //用Collection初始化数组elementData
          size = elementData.length;
          if (elementData.getClass() != Object[].class)
              elementData = Arrays.copyOf(elementData, size, Object[].class);
      }
    • 动态拓展 :

      为了实现这一机制,java 引进了 Capacity 和 size 概念,以区别数组的 length。为了保证用户增加新的列表对象,java设置了最小容量(minCapacity),通常情况上,它大于列表对象的数目,所以 Capactiy 虽然就是底层数组的长度(length),但是对于最终用户来讲,它是无意义的。而size存储着列表对象的数量,才是最终用户所需要的。为了防止用户错误修改,这一属性被设置为privae的,不过可以通过size()获取。

      private void grow(int minCapacity) {
          // overflow-conscious code
          int oldCapacity = elementData.length;
          int newCapacity = oldCapacity + (oldCapacity >> 1);//新容量扩大到原容量的1.5倍,右移一位相关于原数值除以2。
          if (newCapacity - minCapacity < 0)
              newCapacity = minCapacity;
          if (newCapacity - MAX_ARRAY_SIZE > 0)
              newCapacity = hugeCapacity(minCapacity);
          // minCapacity is usually close to size, so this is a win:
          elementData = Arrays.copyOf(elementData, newCapacity);
      }
      private static int hugeCapacity(int minCapacity) {
          if (minCapacity < 0) // overflow
              throw new OutOfMemoryError();
          return (minCapacity > MAX_ARRAY_SIZE) ?
              Integer.MAX_VALUE :
              MAX_ARRAY_SIZE;//MAX_ARRAY_SIZE和Integer.MAX_VALUE为常量,详细请参阅下面的注解
      }
  • 相关阅读:
    SQL CAST与CONVERT区别
    SQL存储过程相关信息查看
    SQLServer系统变量使用
    转 C#中哈希表(HashTable)的用法详解
    SQL中的全局变量和局部变量(@@/@)
    SqlServer中用SQL语句附加数据库及修改数据库逻辑文件名
    SQL Server中常用全局变量介绍
    SQL Server 用户定义表类型
    03- 手机App功能测试要点以及登录页面的测试
    1. APP移动端性能测试基础知识入门
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9420957.html
Copyright © 2011-2022 走看看