从零开始带你学习Java中的数据结构之Arrays/ArrayList精析

  最近很多小伙伴烦恼,自己刷题对数据结构一无所知,看见leetcode心生胆怯,或者你仅仅在课本上学过数据结构,但不知如何应用到实际的Java代码中,你的福音来啦,现在我们开始从零学习数据结构,助你一步登天!!

数据结构文章汇总
从零开始带你学习Java中的数据结构之HashMap
从零开始带你学习Java中的数据结构之Queue
从零开始带你学习Java中的数据结构之Stack
从零开始带你学习Java中的数据结构之Arrays/ArrayList
从零开始带你学习Java中的数据结构之List/LinkedList
从零开始带你学习Java中的数据结构之Map
从零开始带你学习Java中的数据结构之Set
从零开始带你学习Java中的数据结构之String,StringBuffer,StringBuild

1.初识数据结构

  我们常见的数据结构有以下几种,让我们先来简单认识下它们。

  • 数组(Array)
      数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。数组可以说是最基本的数据结构,在各种编程语言中都有对应。一个数组可以分解为多个数组元素,按照数据元素的类型,数组可以分为整型数组、字符型数组、浮点型数组、指针数组和结构数组等。数组还可以有一维、二维以及多维等表现形式。
  • 栈( Stack)
      栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照后进先出的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语言程序中,经常用于重要数据的现场保护。栈中没有数据时,称为空栈。
  • 队列(Queue)
      队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。一般来说,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。队列中没有元素时,称为空队列。
  • 链表( Linked List)
      链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。链表由一系列数据结点构成,每个数据结点包括数据域和指针域两部分。其中,指针域保存了数据结构中下一个元素存放的地址。链表结构中数据元素的逻辑顺序是通过链表中的指针链接次序来实现的。
  • 树( Tree)
      树是典型的非线性结构,它是包括,2个结点的有穷集合K。在树结构中,有且仅有一个根结点,该结点没有前驱结点。在树结构中的其他结点都有且仅有一个前驱结点,而且可以有两个后继结点,m≥0。
  • 图(Graph)
      图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系。
  • 堆(Heap)
      堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。堆的特点是根结点的值是所有结点中最小的或者最大的,并且根结点的两个子树也是一个堆结构。
  • 散列表(Hash)
      散列表源自于散列函数(Hash function),其思想是如果在结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较操作而直接取得所查记录。

2.jdk1.8–Arrays数组

2.1Arrays数组简介

  • 父类: Object

  Java 语言中提供的数组是用来存储固定大小的同类型元素,所以切记,数组的大小一旦确定是不可变的,所以我们在初始化数组的时候要明确数组的大小。

2.2.如何创建Arrays数组

  Java 中常用的创建数组的方式有两个。

  • dataType[] array = new dataType[arraySize];,此方法适用声明一个大小为arraySize的数组array,类型为dataType。
  • dataType[] array = new dataType[]{arrayelement1,arrayelement2.....};,此方法适用声明一个存储元素为arrayelement1,arrayelement2…的数组array,类型为dataType。

2.3Arrays数组常用方法

  • asList():
    返回由指定数组支持的固定大小的列表,例子如下List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");此时可直接输出stooges,即可得到[Larry, Moe, Curly]
  • copyOf(dataType[] original, int newLength)
    复制指定的数组,newLength指定复制的长度。int [] a=Arrays.copyOf(num,5);此时数组a就包含了数组num的前五个值。
  • equals(dataType[]a, dataType[]a2)
    如果两个数组内容相等,返回true。dataType[]必须为两个相同类型。如int []num={1,2}; int []num2={1,2};Arrays.equals(num,num2)的返回值为true
  • fill(dataType[] a,int fromIndex,int toIndex,dataType val)
    将指定的类型值val替换掉索引范围内的数组元素。 要填补的范围从索引fromIndex (包括)扩展到索引toIndex -1。即如果 fromIndex=2, toIndex=3,则只替换a[2]的值为val。
  • sort(dataType[] a)
    按照数字顺序排列指定的数组。(按照Ascall码从小到大排序)
    Arrays.sort(arr);
  • toString(dataType[] a)
    返回指定数组的内容的字符串表示形式。注:此方法可原样输出创建时的数组int[] num ={1,5,2,3,2,4,20}; String k=Arrays.toString(num);则输出k时输出的时[1, 5, 2, 3, 2, 4, 20]

3.jdk1.8–ArrayList数组

3.1ArraysList数组简介

  可调整大小的数组的实现List接口。 实现所有可选列表操作,并允许所有元素,包括null 。可以存放重复元素,并且数组长度动态可变。

  • 父类:AbstractList< E >
  • 实现的接口:Collection < E >, List < E >,RandomAccess, Cloneable, java.io.Serializable

3.2.如何创建ArrayList数组

  • ArrayList<Integer> arraylist = new ArrayList<Integer>()此语句用来声明一个数组链表arraylist
  • ArrayList<Integer> arraylist2= new ArrayList<Integer>(arraylist);此语句用来创建一个数组链表arraylist2,其中arraylist已经存在,此时 arraylist2与 arraylist完全相同。

3.3ArrayList数组常用方法

  • ** void add(int index, E element))**:
    将指定的元素追加到此列表的指定位置。注:若不填写index,则默认加到末尾,若填写index,则将element加入述责链表的第index的位置假设set=[1,2,3,4]; set.add(2,7);则set.get(2)=7;最终set2=[1,2,7,2,4],但不可把值设为3,会报错,这样就不需要index,可以直接加入后面
  • size()
    返回列表的元素数。如set.size()=5
  • isEmpty():
    如果列表为空,会返回true
  • contains(Object o)
    如果链表包含指定元素,则返回true。如set.contains(2)=true
  • indexOf(Object o):
    返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。如set.indexOf(2)=1
  • lastIndexOf
    返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。如set.indexOf(2)=3
  • toArray():
    返回一个包含此列表中所有元素的数组,使用方法如下Object [] p =set.toArray();将set列表返回数组,并赋值给p。
  • get(int index)
    返回此列表中指定位置的元素。
  • set(int index,E element)
    用指定的元素替换此列表中指定位置的元素
  • remove(int index)
    删除该列表中指定位置的元素。 将任何后续元素移动到左侧(从其索引中减去一个元素)。
  • boolean remove(Object o):
    从列表中删除指定元素的第一个出现(如果存在)。 如果列表不包含该元素,则它不会更改.如Object p=2; set1.remove(p);此时set值为[1,7,2,4]
  • void clear()
    从列表中删除所有元素。 此呼叫返回后,列表将为空。
  • boolean addAll(Collection<? extends E> c):
    按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。如果成功添加,返回true。如set2=[1,2]; set.addall(set2); set=[1,2,7,2,4,1,2]
  • boolean removeAll(Collection<?> c)
    从此列表中删除指定集合中包含的所有元素。
  • List subList(int fromIndex, int toIndex)
    返回指定的fromIndex (含)和toIndex之间的列表部分的视图Object a=set.subList(0,2);此时a=[1,2]
  • void sort(Comparator<? super E> c)
    对此列表进行排序Collections.sort(set);则此时set=[1,2,2,4,7]

猜你喜欢

转载自blog.csdn.net/weixin_40485391/article/details/107602673