各位看官早安午安晚安呀
假如您以为这篇文章对您有帮助的话
欢迎您一键三连,小编尽尽力做到更好
欢迎您分享给更多人哦
大家好,我们本日来学习java数据结构的第一章ArrayList(顺序表)
1.ArrayList的概念
那小伙伴就要问了线性表到底是什么呢? 线性表 ( linear list ) 是 n 个具有雷同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列...(我们后续都会进行讲授) 线性表起首是一个序列,也就是说,元素之间是有顺序的,假如元素存在多个,那么第一个元素无前驱。末了一个元素无后驱。其他每个元素都必须有一个前驱和后驱。 例如: usedSize这个变量黑白常紧张的,我们的增删查改都要用到 1.2ArrayList的模拟实现
目前我们自己实现了顺序表这种结构,以后用到的时间,Java已经为我们提供好了
ArrayList(就是一个平凡的类实现了List接口)
(自己看一下方法)(ArrayLIst内里的方法,底层方法)(我们可以看出来ArrsyList底层的数组我们在实例化对象时也是默认长度为我们的常量值,有效元素个数非常紧张,我们增加删除元素等方法都要用的)
2:构造方法
我们要了解一个类起首要了解他的构造方法
ArrayList<E>中的E就表现列表中存储的元素的类型
ArrayList
2.1:构造方法一,三
- ArrayList<Integer> list = new ArrayList<>(); 这种能用的方法更多
- List<Integer> list = new ArrayList<>(); 一般我们用这一种,向上转型,动态绑定的等等,你俩用哪个主要看自己业务场景
- ArrayList<Integer> list = new ArrayList<>(15)
复制代码 我们可以看到默认数组长度是10,前面源码图解上有
2.2:构造方法二
然后我把list1指定的类型换成Integer就解决问题了!
大家也可以看到我显着对于list3只add了一次但是,打印出来的值却把list1数组内里的内容也拷贝过来了(拷贝在外面构造方法那一步就完成了)
2.3:ArrayList常见利用
- public static void main(String[] args) {
- ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(2);
- list.add(3);
- list.add(1,4);
- System.out.println(list);//到这里是【1,4,2,3】
- list.remove(1);//这两个老是搞混,这个是删除1小标的值
- list.remove(new Integer(1));//要删除1这个元素的值一定要用这种方法,因为这个参数是Object类型的
- System.out.println(list);//到这里是【2,3】
- // list.get(2);//这里会报一个数组越界异常,就是用来和UsedSize比较
- list.add(99);
- list.add(100);
- list.add(101);
- boolean isFalse = list.contains(new Integer(100));//这里最好用Integer类型的
- System.out.println(isFalse);//true
- List<Integer> list1 = list.subList(1,4);//左闭右开
- System.out.println(list1);
- list.set(1,200);
- System.out.println(list);
- System.out.println(list1);
- //list1得到的是从list数组里面的引用,只要改变其中一个元素的值,另一个也会改变
- list.clear();
- System.out.println(list);
- //全部清除
- }
复制代码 2.4:ArrayList的三种遍历
ArrayList 可以使用三方方式遍历: for 循环 + 下标、 foreach 、使用迭代器 - public static void main(String[] args) {
- List<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(2);
- list.add(3);
- list.add(4);
- list.add(5);
- // 使用下标+for遍历
- for (int i = 0; i < list.size(); i++) {
- System.out.print(list.get(i) + " ");
- }
- System.out.println();
- // 借助foreach遍历
- for (Integer integer : list) {
- System.out.print(integer + " ");
- }
- System.out.println();
- //迭代器
- Iterator<Integer> it = list.listIterator();
- //ListIterator<Integer> it = list.listIterator();也可以
- //ListIterator是Iterator的子类
- while(it.hasNext()){
- System.out.print(it.next() + " ");
- }
- System.out.println();
- }
复制代码 注意: 1. ArrayList 最长使用的遍历方式是: for 循环 + 下标 以及 foreach 2. 迭代器是设计模式的一种,后续博客我会继续讲授 2.5:ArrayList的扩容机制的缺陷
ArrayList是一个动态类型的顺序表,即:在插入元素的过程中会自动扩容。以下是ArrayList源码中扩容方式 【 总结 】 1. 检测是否真正必要扩容,假如是调用 grow 准备扩容 2. 预估必要库容的大小 初步预估按照 1.5 倍大小扩容 ,假如用户所需大小超过预估1.5 倍大小,则按照用户所需大小扩容 真正扩容之前检测是否能扩容成功,防止太大导致扩容失败 3. 使用 copyOf 进行扩容 3:杨辉三角
力扣杨辉三角
实现:
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- public class Test {
- public static void main(String[] args) {
- int num = 5;
- List<Integer> row = new ArrayList<>();
- List<List<Integer>> ret = new ArrayList<>();
- row.add(1);
- ret.add(row);
- for (int i = 1; i < num; i++) {
- List<Integer> curRow1 = new ArrayList<>();
- curRow1.add(1);//每行的第一个元素都是1
- List<Integer> previousRow = ret.get(i - 1);
- for (int j = 1; j < i; j++) {
- Integer x = previousRow.get(j) + previousRow.get(j - 1);
- curRow1.add(x);
- }
- curRow1.add(1);//每行的最后一个元素也都是1
- ret.add(curRow1);//把这一行的数组加进去
- }
- for (List<Integer>list:ret //遍历数组
- ) {
- System.out.println(list);
- }
- System.out.println("============================");
- Iterator<List <Integer>> it = ret.listIterator();//使用迭代器遍历数组
- //ListIterator<Integer> it = list.listIterator();也可以
- //ListIterator是Iterator的子类
- while(it.hasNext()){
- System.out.print(it.next() + " ");
- System.out.println();
- }
- }
- }
复制代码
上述就是数据结构-ArrayLIst-数组的深入包装 的全部内容了,能看到这里相信您肯定对小编的文章有了肯定的认可,数据结构的出现让我们对于数据的组织的使用有了更加方便的使用~~
有什么问题欢迎各位大佬指出
欢迎各位大佬评论区留言修正
您的支持就是我最大的动力!!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |