arraylist详解(arraylistapi)

作者:电脑培训网 2024-04-30 20:35:26 992

深入分析ArrayList的使用

文章目录

arraylist详解(arraylistapi)

1.什么是ArrayList?2.ArrayList的构造方法3.ArrayList的常用方法常用方法遍历ArrayList,使用迭代器删除元素4.ArrayList的扩展机制一、ArrayList是什么?

ArrayList类是一个可以动态修改的数组。与普通数组的区别在于它不是固定的。大小限制允许我们添加或删除元素。ArrayList继承了AbstractList并实现了List接口。

我们发现ArrayList类位于java.util包中,使用前需要引入它。

导入java.util.ArrayList;

ArrayList是如何定义的:

ArrayListEarrayList=newArrayListE();

这个数字E是泛型实参类型,只能是引用数据类型。我们可以传递ArrayList想要存储的任何类型的数据。

ListE列表=newArrayListE();

因为我们的ArrayList继承自List,所以我们可以通过父类来接受子类对象,并向上进行改造。

二、ArrayList的构造方法

我们发现ArrayList一共提供了三种构造方法。

施工方法一:

构造一个空的序列表

ListInteger列表=newArrayList();

施工方法二:

构造一个指定大小为5的序列表

ListInteger列表=newArrayList(5);

施工方法三:

这里传入的要么是它自己的类型,要么是子类类型。

这里构造了一个与list2的元素一致的序列列表。

ListIntegerlist2=newArrayList(5);ListInteger列表=newArrayList(list2);

最初的陷阱

列表列表=newArrayList();

如果序列表以这种方式初始化,则不指定类型。这种情况下,任何类型的元素都可以存储,这会带来很大的安全风险。

三、ArrayList的常见方法

常见方法

在我上一个实现顺序表中,大部分方法都是手动实现的。这里我将解释几个关键点。

删除方法

ArrayList为我们提供了两种remove方法

一是传入要删除的下标,二是传入要删除的引用。

publicstaticvoidmain(String[]args){ListIntegerlist=newArrayList();}列表.add(10);列表.add(8);列表.删除(1);System.out.println(列表);}

如果我们传入的是int类型,那么我们删除的就是下标的数据。

publicstaticvoidmain(String[]args){ListIntegerlist=newArrayList();}列表.add(10);列表.add(8);列表.删除(新整数(10));System.out.println(列表);}

如果我们传入引用数据类型,则序列表中的引用数据将被删除。

子列表方法

publicstaticvoidmain(String[]args){ListIntegerlist=newArrayList();}列表.add(1);列表.add(2);列表.add(3);列表.add(4);System.out.println('拦截前的list:'+list);ListIntegerlist1=list.subList(1,3);列表1.设置(0,5);System.out.println('拦截后的list:'+list);}

为什么改变list1后,list的数据也改变了。

因为拦截后并没有将一份内容复制到list1中,而是指向同一段内容。

遍历ArrayList

方法1:

publicstaticvoidmain(String[]args){ListIntegerlist=newArrayList();}列表.add(1);列表.add(2);列表.add(3);列表.add(4);for(inti=0;ilist.size();i++){System.out.print(list.get(i)+'');}System.out.println();}

方法二:

publicstaticvoidmain(String[]args){ListIntegerlist=newArrayList();}列表.add(1);列表.add(2);列表.add(3);列表.add(4);for(Integerx:list){System.out.print(x+'');System.out.println();}

方法三:

使用迭代器

方法function.next()返回迭代器写入元素并更新迭代器状态。hasNext()检测集合中是否有元素。remove()删除迭代器返回的元素publicstaticvoidmain(String[]args){ListInteger列表=newArrayList();列表.add(1);列表.add(2);列表.add(3);列表.add(4);IteratorIntegerit=list.listIterator();while(it.hasNext()){System.out.print(it.next()+'');System.out.println();}

使用迭代器删除元素

我们删除集合小于3的元素

publicstaticvoidmain(String[]args){ListIntegerlist=newArrayList();}列表.add(1);列表.add(2);列表.add(3);列表.add(4);IteratorIntegerit=list.listIterator();while(it.hasNext()){if(it.next()3){it.remove();System.out.println(列表);}

迭代器的remove方法只能删除当前指向的元素。

四、ArrayList的扩容机制

ListInteger列表=newArrayList();

很多资料都讲用这种方式初始化一个集合,说默认大小是10,但实际情况是这样吗?让我们一步步查看源码来了解一下。

我们发现当前的引用指向了后面的引用

我们发现这里的引用是空引用,初始集合是空集合。

那么如何扩容呢?

既然我们的序列列表是空的,那么如何添加它呢?

如果不带参数构造,则传递默认大小和所传递大小的最大值。

我们可以发现,如果大于数组大小,它就会增长。

我们可以发现,计算出一个新的容量,并与我们传入的大小进行比较。如果新的容量小于传入的大小,则将当前集合大小指定为传入的大小。否则,将集合大小扩大1.5次。

但是如果我们的1.5倍扩展超出了规定的范围2147483639

系统会报内存溢出异常。

1.检查是否确实需要扩容。如果叫成长,就准备扩张。

2.估计所需的存储容量

初步预计产能扩大1.5倍。

如果用户需求的大小超过预计大小的1.5倍,将根据用户需求的大小进行扩容。

在实际扩容前,先检查扩容是否能够成功,防止扩容过大导致扩容失败。

3.使用copyOf进行扩展

相关推荐

  • 培训机构学习linux,培训班linux

    培训机构学习linux,培训班linux

    大家好,今天小编关注到一个比较有意思的话题,就是关于培训机构学习linux的问题,于是小编就整理了3个相关介绍培训机构学习linux的解答,让我们一起看看吧。l…

    培训机构学习linux,培训班linux 2024-10-01 03:26:19
  • 哪个机构培训cisp好,cisp培训机构哪家好

    哪个机构培训cisp好,cisp培训机构哪家好

    大家好,今天小编关注到一个比较有意思的话题,就是关于哪个机构培训cisp好的问题,于是小编就整理了1个相关介绍哪个机构培训cisp好的解答,让我们一起看看吧。c…

    哪个机构培训cisp好,cisp培训机构哪家好 2024-07-07 06:44:31
  • 云计算培训linux机构,linux云计算培训班价格

    云计算培训linux机构,linux云计算培训班价格

    大家好,今天小编关注到一个比较有意思的话题,就是关于云计算培训linux机构的问题,于是小编就整理了3个相关介绍云计算培训linux机构的解答,让我们一起看看吧…

    云计算培训linux机构,linux云计算培训班价格 2024-06-18 20:06:54
  • 以色列印度培训机构,以色列christina培训

    以色列印度培训机构,以色列christina培训

    大家好,今天小编关注到一个比较有意思的话题,就是关于以色列印度培训机构的问题,于是小编就整理了4个相关介绍以色列印度培训机构的解答,让我们一起看看吧。亚训有哪些…

    以色列印度培训机构,以色列christina培训 2024-06-07 07:44:05
  • 机智云 esp8266 arduino(esp8266接入机智云教程)

    机智云 esp8266 arduino(esp8266接入机智云教程)

    第十章STM32+ESP8266连接机智云,实现小型物联网智能家居项目前言最近有很多朋友私信,要求我推出一个关于远程控制以及通过APP获取传感器信息的实验教程。…

    机智云 esp8266 arduino(esp8266接入机智云教程) 2024-05-07 09:36:57
热门推荐

猜你喜欢