精华内容
下载资源
问答
  • java ArrayList无限添加元素

    千次阅读 2015-10-31 11:51:24
    ArralList底层使用数组实现的,为什么它可以无限添加元素
    ArrayList的底层使用数组进行存放元素的,底层实现是通过一个对象数组Object[]来存放元素的,由于是对象数组,所以只能存放对象,并可以存放任何对象。而数组中存放了对象的引用,所以ArrayList中也存放对象的引用,ArrayList只能存放对象。
    ArrayList有3个构造函数:

    ArrayList()
              构造一个初始容量为 10 的空列表。
    ArrayList(Collection<? extends E> c)
              构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
    ArrayList(int initialCapacity)
              构造一个具有指定初始容量的空列表。
    我们通常使用ArrayList时会使用其不带参数的构造函数。源码如下:
    private transient Object[] elementData;
      
    public ArrayList( int initialCapacity) {
          super ();
          if (initialCapacity <  0 )
              throw new IllegalArgumentException( "Illegal Capacity: " + initialCapacity);
          this .elementData =  new Object[initialCapacity];
      }
      /**
       * Constructs an empty list with an initial capacity of ten.
       */
      public ArrayList() {
          this ( 10 );
      }
    通过以上代码分析
        其底层实现是:
            不带参数的构造函数会调用带参数的构造函数。
            不带参数的构造函数会默认传递一个容量为10参数,在带参数的构造函数中会声明一个长度为10的Object数组,也就是说使用不带参的构造函数时使用this关键字调用有参的构造函数并设置初始容量大小为10。

    我们学习到这,细心的读者或者初学者可能会发现一个问题。当我们使用ArrayList时,我们可以无限的往里添加元素,这是为什么呢?它底层不是由数组实现的,使用无参构造方法时系统会默认提供默认参数10,而使用有参构造函数时我们会指定大小,我们都是知道使用数组时当添加的元素个数大于数组的初始化长度时会报数组下标越界异常,那么ArrayList为什么不会呢?说到这里,可能已有读者知道ArrayList可能会自动为其扩容,没错,的确是这样的。我们来看看源码:

    ArrayList中常用的add方法:
    源码:
    public boolean add(E e) {
         ensureCapacity(size +  1 );   // Increments modCount!!
         elementData[size++] = e;
         return true ;
    }
    使用ensureCapacity(int minCapacity)方法简单的理解就是为ArrayList扩容。
    java api中这样解释:
    public void ensureCapacity(int minCapacity)
    如有必要,增加此  ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
    参数:
    minCapacity - 所需的最小容量
    源码:
    public void ensureCapacity( int minCapacity) {
          modCount++;
          int oldCapacity = elementData.length;
          if (minCapacity > oldCapacity) {
              Object oldData[] = elementData;
              int newCapacity = (oldCapacity *  3 )/ 2 1 ;
              if (newCapacity < minCapacity)
                  newCapacity = minCapacity;
              // minCapacity is usually close to size, so this is a win:
              elementData = Arrays.copyOf(elementData, newCapacity);
          }
      }

    通过以上分析我们得出结论:
          ensureCapacity方法它和底层数组的大小做比较,如果小于底层数组的长度则什么也不做;当大于底层数组长度时,它将原数组的大小进行扩容,大小为原数组的3/2+1;然后使用Arrays.copyOf方法,将原数组的元素拷贝到新指定大小的数组里,实现数组的扩容。
    展开全文
  • ArrayList()的特点: 1.有序可重复 2.效率高3.查询快 4.异步(不安全) 不支持线程同步,线程不安全5.可变数组JDK是java的运行环境package test; import java.util.*; public class Test { public static ...

    ArrayList()的特点:

     1.有序可重复 

    2.效率高

    3.查询快   

    4.异步(不安全) 不支持线程同步,线程不安全

    5.可变数组


    JDK是java的运行环境


    package test;
    import java.util.*;
    public class Test {
    
    
    	 public static void main(String args[]){
    		 /*(3)
    随机生成10个字母 
    */
                    List<Character> list=new ArrayList<Character>();
    		 for(int i=1;i<=10;i++){
    			 char c=(char)(int)(Math.random()*26+97);
    			 list.add(c);
    		 }
    		 Collections.sort(list,Collections.reverseOrder());
    		 System.out.println(list);
                      /*(2)*/
    		 List<Integer>list=new ArrayList<Integer>(); //Integer:类  对象型数据类型   指定了集合的类型
    		 		 //Ingeter 是int的包装类  string没有包装类
    		 list.add(1); // 向集合中添加元素
    		 list.add(-1);	 
    		 list.add(100);	 
    		 list.add(20);
    		 list.add(-120);	 
    		 list.add(90);
    		 list.remove(2); //去除集合中的下标为2 的元素           集合下标是从0开始的
    		 list.size();    //  集合的大小
    		 System.out.println(list);//输出集合元素
    		 
    		 Collections.sort(list); //给集合排序      升序
    		 System.out.println(list);
    		 Collections.sort(list,Collections.reverseOrder()); //集合排序 降序 
    		 System.out.println(list);
    		 /*
    		  * (1)
    		  * 
    		 List list=new ArrayList(); //没有指定集合的类型 就默认加入的第一个元素的类型为集合的类型
    		 list.add(1); // 向集合中添加元素
    		 list.add(-1);	 
    		 list.add(100);	 
    		 list.add(20);
    		 list.add(-120);	 
    		 list.add(90);
    		 list.remove(2); //去除集合中的下标为2 的元素           集合下标是从0开始的
    		 list.size();    //  集合的大小
    		 System.out.println(list);//输出集合元素
    		 
    		 Collections.sort(list); //给集合排序      升序
    		 System.out.println(list);
    		 Collections.sort(list,Collections.reverseOrder()); //集合排序 降序 
    		 System.out.println(list);
                     */
    	 }
    	 
    }

    展开全文
  • java如何向数组里添加元素

    万次阅读 多人点赞 2018-09-14 23:54:52
    java篇 哇,菜鸟第一次写这个东西,当加深印象,大佬们请略过,欢迎...但有个可以改变大小的数组为ArrayList,即可以定义一个ArrayList数组,然后用add(element)方法往里添加元素即可,还可add(index,element)往指...

    java篇
    哇,菜鸟第一次写这个东西,当加深印象,大佬们请略过,欢迎有错指出。

    向数组里添加一个元素怎么添加,这儿总结有三种方法:

    1、一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。
    但有个可以改变大小的数组为ArrayList,即可以定义一个ArrayList数组,然后用add(element)方法往里添加元素即可,还可add(index,element)往指定下标处添加元素;例子如下:

            List<Integer> list=new ArrayList<Integer>();
        	list.add(1);
        	list.add(2);
        	list.add(3);
        	list.add(2,4);
        	System.out.println(list);
    

    打印结果: [1, 2, 4, 3]

    2、思路为先把array转化为list,用list的add()方法添加元素,再把list转化为array。
    但这儿会有一个陷阱盲区,在把array转化为list的过程中,使用的asList()方法会返回一个final的,固定长度的ArrayList类,并不是java.util.ArrayList,直接这样利用它进行add()或remove()是无效的。

    List<Integer> list=new ArrayList<Integer>();
        	list=Arrays.asList(sz);
        	list.add(5);
    

    那应该怎么做呢,在定义list的时候就直接对array进行转化,代码如下:
    (注意这儿Array类型是包装类,若是一般数据类型记得转化,转化参考我其他博客文章。)

    //如 List<String> list=new ArrayList<String>();
    //    	     list=Arrays.asList(str);
    //这样不行,须如下:
    
    Integer []sz={3,2};
    List<Integer> list=new ArrayList(Arrays.asList(sz));//**须定义时就进行转化**
        	list.add(1,5);
        	Integer[] nsz=new Integer[list.size()];
        	list.toArray(nsz);
            System.out.println(Arrays.toString(nsz));
    

    结果输出为:[3, 5, 2]

    3、第三个方法思路为创建一个新数组,新数组的大小为旧数组大小+1,把旧数组里的元素copy一份进新数组,并把要添加的元素添加进新数组即可。

    以上是菜鸟自我总结,如有错误或更好的建议请大佬们指正。

    展开全文
  • ArrayList添加元素

    千次阅读 2017-01-18 14:03:54
    java"] public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } [/code] 如果指定了长度,则必需大于1 [code="java"] public ArrayList(int initia...
    如果没有指定长度,则只是初始化一个空数组。
    

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


    如果指定了长度,则必需大于1

    public ArrayList(int initialCapacity) {
    if (initialCapacity > 0) {
    this.elementData = new Object[initialCapacity];
    } else if (initialCapacity == 0) {
    this.elementData = EMPTY_ELEMENTDATA;
    } else {
    throw new IllegalArgumentException("Illegal Capacity: "+
    initialCapacity);
    }
    }


    初始化时如果指定了集合,可以看到是空集合的情况下,其实也是初始化了一个空的
    ArrayList。c.toArray()如果Collection是通过Arrays,toArray返回的,将是Arrays里面指定的泛型 ,而不是Object,将会返回原始的类型。
    也就是通过集合初始化后的ArrayList里面的数组数据类型均为Object[]。
    在我们遍历的时候,会将Object转化成我们需要的对象类型。

    public ArrayList(Collection<? extends E> c) {
    elementData = c.toArray();
    if ((size = elementData.length) != 0) {
    // c.toArray might (incorrectly) not return Object[] (see 6260652)
    if (elementData.getClass() != Object[].class)
    elementData = Arrays.copyOf(elementData, size, Object[].class);
    } else {
    // replace with empty array.
    this.elementData = EMPTY_ELEMENTDATA;
    }
    }


    添加元素时,如果长度会自动扩充,扩充为现有长度的1.5倍。

    if (minCapacity - elementData.length > 0)
    grow(minCapacity);

    private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    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);
    }
    展开全文
  • java ArrayList数组中如何插入一个元素

    千次阅读 2016-07-19 17:07:08
    java ArrayList数组使用add来插入一个元素,实例如下: import java.util.ArrayList; public class Test {  public static void main(String[] args) {  ArrayList list = new ArrayList();  list....
  • ArrayList的add()添加元素时重复的问题

    千次阅读 2020-12-10 10:52:23
    add()方法添加的是对象的引用,在一次add后,如果立即修改add的对象,并重新add,会将上一次的add对象也改变(在循环中使用add方法尤其需要注意),如: 结果如下:可以看到orientation一直是250(实际是0,10,20...
  • foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素Java语言从JDK 1.5.0开始引入foreach循环。在遍历数组、集合方面,foreach为开发人员提供了...
  • Java如何向数组里添加元素

    万次阅读 2021-01-08 17:11:59
    向数组里添加一个元素怎么添加,一般数组是不能添加元素的,因为数组在初始化时就已定好长度了,不能改变长度。 比如: String[] str = new String[5]; System.out.println(Arrays.toString(str)); String[] str2...
  • java向数组里添加一个元素怎么添加

    千次阅读 2019-11-08 12:27:05
    但有个可以改变大小的数组为ArrayList,即可以定义一个ArrayList数组,然后用add(element)方法往里添加元素即可,还可add(index,element)往指定下标处添加元素;例子如下: List<Integer> li...
  • Java ArrayList

    2020-12-16 17:37:00
    ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素ArrayList 继承了 AbstractList ,并实现了 List 接口。 ArrayList 类位于 java.util 包中,使用...
  • ArrayList是基于数组的线性表容器,前面学习了添加元素、删除元素、现在抓紧学习一下获取元素的功能是怎样实现的? get方法,用于从ArrayList获取一个指定下标的元素,第一个元素的下标是0 indexOf方法,用于...
  • How to add many values to an arraylist at once? 假设我有以下代码: String a =" some texte"; String b =" text"; String c ="sf"; String d =" kjel"; String e ="lkjl"; ArrayList<String> list = new ...
  • 下面的是ArrayList的简单的添加元素和删除元素的实例: ArrayList<String> list = new ArrayList<String>(); list.add("元素1"); list.add("元素2"); list.add("元素3"); list.add("元素4"); ...
  • java arraylist批量添加数据

    千次阅读 2019-09-18 17:30:42
    在使用ArrayList类时,对list进行添加元素即 List<String> list = new ArrayList<String>(); list.add("123"); 运行结果如下 上述写法只能添加一个元素,如果需要在列表初始化时添加某些元素到链表中...
  • * 在出现E的地方我们使用引用数据类型替换即可 * 举例:ArrayList,ArrayList * * 构造方法: * ArrayList() * * 添加元素: * public boolean add(E e):添加元素 * public void add(int index,E element):在指定的...
  • 【学习背景】 欢迎进来学习的小伙伴~ 不管你是学生,还是职场小白,还是入行1~...LinkedList底层数据结构是链表,添加和删除元素效率比ArrayList高~ ArrayList底层数据结构是数组,查询效率比LinkedList高~ 面试官:哦
  • Java如何对ArrayList里的元素排序

    千次阅读 2017-06-25 23:01:01
    rrayList中的元素进行排序,主要考查的是对util包中的Comparator接口和Collections类的使用。 实现Comparator接口必须实现compare方法,自己可以去看API帮助文档。 创建一个Comparator实例后,用Collections....
  • JavaArrayList 元素的排序

    万次阅读 2015-12-13 15:53:55
    ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减。 <一> 排序字符串的ArrayList ArrayList中存储的是String类型的数据,...
  • ArrayList提供了add(E e)、add(int index, E element)、addAll(Collection c)、addAll(int index, Collection c)这些添加元素的方法。 具体实现如下: // 将指定的元素添加到此列表的尾部。 public ...
  • ArrayList 集合中怎么插入元素

    万次阅读 2018-11-13 17:38:08
    写一个测试方法,创建一个集合,看看到底是怎么执行插入操作的。 public static void test1(){ //创建一个集合 ... list = new ArrayList&lt;Integer&gt;(); list.add(1); list.add(7); ...
  • In this tutorial you will learn how to remove ... 在本教程中,您将学习如何从Java中的arraylist中删除重复的元素。 We can remove repeated elements in arraylist by two ways. 我们可以通过两种方式删除...
  • Exception in thread “main” java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:665) at java.util.ArrayList.add(ArrayList.java:477)
  • Java ArrayList集合常用方法

    万次阅读 多人点赞 2017-08-17 18:19:10
    创建对象:与其他普通的引用数据类型创建方式完全相同,但要指定容器中存储的数据类型:ArrayList<要存储元素的数据类型> 变量名 = new ArrayList<要存储元素的数据类型>();集合中存储的元素,只能为括号中指定的...
  • java ArrayList合并相同元素

    千次阅读 2013-10-19 15:02:26
    public static void main(String[] args) {... List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add("c"); list.add("b"); list.add("b"); System.out.println("合
  • 剖析ArrayList底层和添加元素的原理

    千次阅读 2018-12-19 10:20:55
    那么我们来看下ArrayList的 底层是如何实现的 其实ArrayList底层是一个Object 的 数组 我们来看下jdk中的源代码 如下 public class ArrayList&lt;E&gt; extends AbstractList&lt;E&gt; ...
  • Java ArrayList类方法总结

    千次阅读 多人点赞 2018-09-13 20:37:47
    Java ArrayList常用方法总结 关于ArrayList ArrayList是集合框架List接口的实现类(数组实现) List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中...
  • Java删除ArrayList中的重复元素的2种方法 ArrayListJava中最常用的集合类型之一。它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序。在编码时我们经常会遇到那种必须从已建成的ArrayList中删除重复...
  • Java作业-ArrayList集合迭代读取元素

    千次阅读 2017-11-23 22:28:01
    目标效果: 结果是从1打印到99,这里只截取了下半部分。... * 使用ArrayList集合,对其添加100个不同的元素: 1.使用add()方法将元素添加ArrayList集合对象中; 2.调用集合的iterator()方法获得Iterator
  • 使用ArrayList数组动态添加元素

    万次阅读 2017-10-08 21:51:03
    本文通过实例讲解Java中如何使用ArrayList类。 Java.util.ArrayList类是一个动态数组类型,也就是说,...可以随时从链表中添加或删除一个元素ArrayList实现了List接口。 大家知道,数组是静态的,数组
  • ArrayList添加、移除元素源码分析

    千次阅读 2018-05-03 17:55:49
    ArrayList 是基于数组存储的,默认数组大小为 10,当添加元素容量不够时,将进行扩容,对于以下代码: // 创建一个 ArrayList 对象 ArrayList&lt;Integer&gt; nums = new ArrayList&lt;&gt;(); /...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,223
精华内容 68,089
关键字:

javaarraylist添加元素

java 订阅