线性表基本概念

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储

  • > 线性表不允许中间有空洞

注意: 顺序表中一定要区分两个概念 容量(capacity) vs 元素个数(size);线性表的所有下标只和元素个数相关,和容量无关 .

顺序表基本概念

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。

数组中存在的问题:

1.无法严格区分容量和已有元素的个数

2.数组无法做到自行扩容


java中已经提供的顺序表—java.util.ArrayList
ArrayList是一个泛型类,元素类型使用泛型表示

ArrayList重要方法

public boolean add(E e);向顺序表中进行尾插,一定
会返回true。注意:放在目前最后一个元素的后边,而不是
容量的最后一个位置。
public void add(int index,E element);向顺序表
中插入e元素,放到下标为index的位置,注意index的合
法下标是0~size
如:顺序表  [a,b,c]现在调用方法add(1,元素),此时会将b,c依次向后移,将要插入的元素放在1下标。

举个栗子:

ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add(2,"1");
System.out.println(list.size());
报错:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 1

上面这个代码会报错,因为此时的size是1,下标2超出了范围,所以越界报错了。
改为以下代码就不会报错了,因为插入index的合法范围是0~size

ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add(1,"2");
System.out.println(list.size());

问:index的取值范围是什么?和容量有关还是和size有关?

回答:和size有关,和容量无关。

 public E remove(int index);删除index位置的元素,返回被删除的元素;删除的时候合法的下标取值范围是[0,size-1]。删掉一个元素后该元素后面的元素会依次向前移动一位,顺序表的元素个数减一。
public boolean remove(Object o);删除指定元素
1.如果该元素在顺序表中并且只有一个,则删除该元素,并且将
后面的元素依次补上,返回true
2.如果该元素没有在顺序表中,什么都不做,返回false,表示
该元素不在顺序表中
3.如果在元素在顺序表中存在且不止一个,则删除第一个遇到
的元素,并且返回true。
public E get(int index);获取顺序表中index位置的元素
并且返回该元素
public E set(int index,E element);向顺序表中index
位置设置元素进去,并且返回该下边位置原来的元素下标的取值范围都是[0,size)
栗子:
[a,b,c]
get(1)   得到b
set(1,"d")   将1下标设置为d并且返回b
public boolean contains(Object o);
判断顺序表中是否包含该元素,包含返回true,不包含返回
false;
public int indexOf(Object o);返回此列表中第一次
出现的指定元素的索引,如果列表不包含该元素,则返回 -1;
返回该元素怒从前往后找的首次遇到的下标,如果没找到就
返回-1
public int lastIndexOf(Object o);返回列表中最后出现
的指定元素的索引;如果列表不包含此元素,则返回 -1 返回
该元素怒从后往前找的首次遇到的下标,如果没找到就返回-1
public void clear();清空一个顺序表,无论原来顺序表
中有没有元素,调用改方法后,size==0
public int size();返回顺序表中当前已有的元素个数
public boolean isEmpty();等价于size == 0,如果此列表
中没有元素,则返回 true

Iterable中的方法

public interface Iterable<T> {Iterator<T> iterator();//通过iterator()方法返回迭代器,通过迭代器可以进一步的进行迭代default void forEach(Consumer<? super T> action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}}default Spliterator<T> spliterator() {return Spliterators.spliteratorUnknownSize(iterator(), 0);}
}

使用栗子:


import java.util.ArrayList;
import java.util.Iterator;public class ArrayListDemo {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("1");list.add(1,"2");list.add("3");Iterable<String> r1 = list;  //r1指向的对象具备迭代能力//1.通过r1得到迭代器对象Iterator<String> iterator = r1.iterator();
//        System.out.println(iterator.hasNext());
//        String s1 = iterator.next(); //返回“1”,iterator内部走到了“2”
//
//        System.out.println(s1);
//        System.out.println(iterator.hasNext());
//        String s2 = iterator.next();
//        System.out.println(s2);
//
//        System.out.println(iterator.hasNext());
//        String s3 = iterator.next();
//
//        System.out.println(s3);
//        System.out.println(iterator.hasNext());//不知道元素个数进行迭代while (iterator.hasNext()){String s = iterator.next();System.out.println(s);}}
}

Iterator类似于之前学过的Scanner

public interface Iterator<E> {boolean hasNext();  //返回true:还有下一个/没有迭代完,返回false:没有下一个了/迭代完了E next(); //1.返回下一个元素 2.同时跳过该元素(这个元素被迭代过了),基于hasNext()返回true的前提default void remove() {throw new UnsupportedOperationException("remove");}default void forEachRemaining(Consumer<? super E> action) {Objects.requireNonNull(action);while (hasNext())action.accept(next());}
}

Collection中的方法


public interface Collection<E> extends Iterable<E> {boolean add(E e);//Collection代表的不一定是线性表,所以没有次序的概念,add可以返回false也可以返回true,但List一定返回truevoid clear();//清空集合int size(); //返回集合中元素的个数boolean isEmpty();//判断是否是一个没有元素的集合boolean contains(Object o);//判断是否存在,和equals方法相关boolean remove(Object o);//从集合中删除o元素Iterator<E> iterator();
}

Collection接口的栗子:

public class CollectionDemo {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("1");list.add("2");list.add("3");Collection<String> collection = list;System.out.println(collection);for (String s : collection){System.out.println(s);}collection.remove("1");System.out.println(collection.isEmpty());System.out.println(collection.add("4"));collection.clear();System.out.println(collection.isEmpty());}
}

通过引用可以执行哪些方法------引用类型决定
通过引用执行方法后真正执行的是哪个类的方法-----引用指向的对象类型决定

只有线性表才有是否有序这个概念。

List接口中的方法

public interface List<E> extends Collection<E> {void sort(Comparator 比较器);List subList(int fromIndex, int toIndex); //包含fromIndex不包含toIndexboolean addAll(Collection 集合);boolean addAll(int index, Collection 集合);boolean containsAll(Collection 集合);boolean removeAll(Collection 集合);boolean retainAll(Collection 集合);Object[] toArray();
}

排序栗子:


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class ListSortDemo  {private static class IntegerComparator implements Comparator<Integer>{@Overridepublic int compare(Integer o1, Integer o2) {return o1.intValue() - o2.intValue();}public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(4);list.add(2);list.add(7);//方法1System.out.println(list);list.sort(new IntegerComparator());System.out.println(list);//方法2//Collections里面放的是给集合对象用的常见方法Collections.sort(list);System.out.println(list);//方法3Collections.sort(list,new IntegerComparator());System.out.println(list);//如果要实现逆序排序,可以修改实现方法compareTo,然后使用上面的方法1和3就能达到逆序排序}}
}

总结

方法:
增(向容器中添加元素)add
删(从容器中删除元素)remove
查(不修改容器的情况下,获取元素get/contains/indexOf/lastIndexOf
改(修改个别元素)set
还有size/isEmpty

核心:
顺序表中不允许出现空洞 index的下标的合法取值,肯定和size()有关
add:[0,size]
remove/get/set:[0,size)


线性表、顺序表以及ArrayList、Iterable、Collection、List中重要的方法相关推荐

  1. rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)

    原文托管在Github: https://github.com/shellhub/blog/issues/52 数据结构与算法之线性表-顺序表实现(C语言版本) 前言 数据结构与算法是一个程序员必备的 ...

  2. 线性表-顺序表的基本操作

    线性表的定义和特点 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列 线性表中元素的个数n(n≥0)称为线性表的长度 空表:n=0 对于非空的线性表或线性结构,特点为: 存在唯一的一个被称作& ...

  3. 线性表→顺序表→链表 逐个击破

    一. 线性表 1. 前言 线性表,全名为线性存储结构.使用线性表存储数据的方式可以这样理解,即 " 把所有(一对一逻辑关系的)数据用一根线儿串起来,再存储到物理空间中 ".这根线有 ...

  4. 数据结构一线性表 (顺序表、单链表、双链表)

    版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 文章目录 1.线性表及其逻辑结构 1.1 线性表的定义 1.2 线性表的抽象数据类型描述 2.线性表的顺序存 ...

  5. 线性表---顺序表链表

    一.线性表 1.线性表中的元素是一对一的关系,除了第一个与最后一个元素之外其他数据元素都是首尾相连的. 如果是一对多就用树来表示,如果是多对多就用网状来表示. 2.线性表的两种存储结构 顺序表:用顺序 ...

  6. Java实现线性表(顺序表,链表)

    顺序表: package seqTable;import java.util.ArrayList; import java.util.Scanner;public class SeqList {pri ...

  7. 线性表----顺序表

    线性表的定义 线性表是具有相同数据类型的n个数据元素的有限序列, 逻辑特性 除第一个元素外,每个元素只有一个前驱,除最后一个元素外,每个元素都有一个后继 物理结构 线性表的存储结构有顺序存储结构和链式 ...

  8. 复习:线性表——顺序表

    线性表:相同特性的数据元素的一个有限序列. 线性表的长度:n 序列中所含元素个数 空表:不包含任何元素 前驱:ai-1是ai的前驱 后继:ai+1是ai的后继 表头元素:a1 表尾元素:an 线性表 ...

  9. 线性表—顺序表-顺序表基本运算的实现

    基本运算--初始化线性表 lintList 目标是构造出一个空的线性表 分配空间后,将length成员设置为0 对L的作用会传递回去 基本运算--销毁线性表 DestroyList C free() ...

  10. 线性表顺序表模板 纯本人手工创造

    /* ***********************************************Author :mubaixuCreated Time :2015-12-08 20:45:05Fi ...

最新文章

  1. 苹果的组件保护机制 AuthCP
  2. K8S Learning(5)——Pod
  3. Linux下安装jdk8步骤详述
  4. 计算机视觉基础——对极几何(Epipolar Geometry)
  5. 对钱感兴趣?聊聊互联网工资收入的组成
  6. 半个月自学入行软件测试,也许你就是下一个测试总监
  7. jQuery Mobile中选择select的data-*选项
  8. 201671010133 2016-2017-2 《java程序设计》 初学java!
  9. ICD-10/11 查询疾病编码方法
  10. win10怎么设置计算机密码怎么设置,win10如何设置开机密码|win10设置登陆密码和账户的方法...
  11. 鸟哥的linux私房菜 第五章
  12. ECMWF数据批量下载
  13. 妇女节投票活动小程序
  14. 如何策划好一场直播方案,抖音新手必备干货丨国仁网络
  15. python判断火车票座位_Python3 实现火车票查询工具
  16. Kubeadm部署-Kubernetes-1.18.6集群
  17. Mysql主从复制,级联复制(重点,重点,重点)命令,参数
  18. react为什么要废弃三个生命周期?
  19. php基础(7)_运算符
  20. Java--微信支付--小程序支付--v3版--完整的代码例子

热门文章

  1. R语言与正态总体均值的区间估计
  2. java表格树_Java程序员值得拥有的TreeMap指南
  3. 18 个常犯的统计学错误,建议收藏!
  4. SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上试读版
  5. 关于 SAP WebIDE 不支持 ES6 语法的问题
  6. SAP Fiori Elements 学习笔记 - 2021年4月19日
  7. 并不是所有SAP产品的UX,都得遵循Fiori UX风格
  8. 培训学习笔记 - 人们不买钻头,他们买孔洞
  9. SAP Fiori Elements - how drop down list with description is correctly rendered
  10. SAP UI5 global configuration interface