zoukankan      html  css  js  c++  java
  • 关于list


    public
    class TestArrayList { public static void main(String[] args) { //1.创建一个ArrayList对象,用来存储多个分数 ArrayList list = new ArrayList(); //2.向ArrayList添加分数 list.add(67); //向末尾添加 list.add(89); // 集合的元素必须是对象类型,不能是基本数据类型。 list.add(78);//如果要放入基本数据类型,需要使用包装类 list.add(89);//JDK5之后,自动装箱 list.add(96); //list.add(Integer.valueOf(67)); //[67, 89, 78, 89, 96] list.add(2, 100); //[67, 89, 100, 78, 89, 96] ArrayList list2 = new ArrayList(); list2.add(45); list2.add(54); list2.add(45); //list.addAll(list2); //[67, 89, 100, 78, 89, 96, 45, 54, 45] list.addAll(0, list2); //list2.addAll(list); //[45, 54, 45, 67, 89, 100, 78, 89, 96] //3.获取ArrayList中的分数 System.out.println(list.toString()); System.out.println(list.size()); System.out.println(list.get(2)); //遍历ArrayList1:使用for循环 System.out.println("-------使用for循环-------"); for (int i = 0; i < list.size() ; i++) { int elem = (int) list.get(i); System.out.println(i+" "+elem); } //遍历ArrayList2:使用for-each循环 System.out.println("-------使用for-each循环--------"); for(Object elem :list){ System.out.println(elem); } //遍历ArrayList3:使用迭代器Iterator System.out.println("---------使用迭代器Iterator-----------"); Iterator it = list.iterator(); while(it.hasNext()){ int elem = (int) it.next(); System.out.println(elem); } } }

    理解 ArrayList的源码

    • ArrayList底层就是一个长度可以动态增长的Object数组;(StringBuilder底层就是一个长度可以动态增长的char数组)
    • public class ArrayList<E> extends AbstractList<E> implements

      List<E>, RandomAccess, Cloneable, Serializable{
             private static final int DEFAULT_CAPACITY = 10;
             private static final Object[] EMPTY_ELEMENTDATA = {};
              private static final Object[]  

      DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
             transient Object[] elementData;

             private int size;

      }

    • 接口是可以一个方法也不提供的,比如 RandomAccess, Cloneable, java.io.Serializable

    public class ArrayList<E> extends AbstractList<E>
            implements List<E>,

    RandomAccess,

    Cloneable,

    java.io.Serializable{}

    JDK1.7中,使用无参数构造方法创建ArrayList对象时,默认底层数组长度是10。JDK1.8中,使用无参数构造方法创建ArrayList对象时,默认底层数组长度是0;第一次添加元素,容量不足就要进行扩容了

    public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

    private static int calculateCapacity(Object[] elementData, int minCapacity) {
        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            return Math.max(DEFAULT_CAPACITY, minCapacity);
        }
        return minCapacity;
    }

    • 容量不足时进行扩容,默认扩容50%。如果扩容50%还不足容纳新增元素,就扩容为能容纳新增元素的最小数量。
    • private void grow(int minCapacity) {

          int oldCapacity = elementData.length;
          int newCapacity = oldCapacity + (oldCapacity >> 1);
          if (newCapacity - minCapacity < 0)
              newCapacity = minCapacity;
          if (newCapacity - MAX_ARRAY_SIZE > 0)
              newCapacity = hugeCapacity(minCapacity); 
          elementData = Arrays.copyOf(elementData, newCapacity);
      }

  • 相关阅读:
    快速上手系列:JavaScript
    快速上手系列:CSS
    快速上手系列:HTML
    滑雪 记忆化搜索简单模型
    洪水
    选数
    斐波拉契数列
    CSS_01_css和html的结合1、2
    struts_24_基于XML校验的规则、特点
    struts_20_对Action中所有方法、某一个方法进行输入校验(基于XML配置方式实现输入校验)
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14241181.html
Copyright © 2011-2022 走看看