目录
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
常见的线性表:顺序表、链表、栈、队列...
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
首先我们需要创建一个数组来存放数据。
备注:因为我为了方便就先创建的整形数组,为了能更好的适应各种类型,大家可以创建泛型的数组,我这里就没写了。
接下来就是对顺序表的各种操作。例如:基本的CURD,打印顺序表,获取顺序表长度,清空顺序表等等。
因为是数组,所以直接遍历数组打印就好了
增加元素的时候需要考虑到数组是否满状态的问题,所以我们需要判断,要死数组空间已满,我们还需要进行扩容。另外,我们还需要判断在这个pos位置是否合法。
判断空间是否已满方法
这里我们简化代码为:
如果要扩容的话,在扩容完成之后,因为顺序表是连续的结构,所以在pos位置新增元素的话,那么pos位置之后的元素就要依次往后挪。这样才能把元素新增进去。
注意:在扩容之后我们需要更改CAPACITY和usedSize的大小。
在这我们需要考虑到此时数组是否为空的情况。
之后还是直接遍历数组的操作。
在这里也需要一次判空操作。
这里可能会出现数组为空的情况和pos不合法的情况,所以需要判断。
我这里是手动抛出的异常,没有另外写了。
删除某个位置上的元素,这里是直接从这个元素开始,让其后面的元素覆盖掉他前一个元素,以达到删除的目的。
后面这几个操作比较简单就不多叙述了。
在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:
[说明]
- public static void main(String[] args) {
- // ArrayList创建,推荐写法
- // 构造一个空的列表
- List<Integer> list1 = new ArrayList<>();
-
- // 构造一个具有10个容量的列表
- List<Integer> list2 = new ArrayList<>(10);
- list2.add(1);
- list2.add(2);
- list2.add(3);
-
- // list2.add("hello"); // 编译失败,List<Integer>已经限定了,list2中只能存储整形元素
- // list3构造好之后,与list中的元素一致
- ArrayList<Integer> list3 = new ArrayList<>(list2);
-
- // 避免省略类型,否则:任意类型的元素都可以存放,使用时将是一场灾难
- List list4 = new ArrayList();
- list4.add("111");
- list4.add(100);
- }
方法 | 解释 |
boolean add(E e) | 尾插e |
void add(int index, E element) | 将 e 插入到 index 位置 |
boolean addAll(Collection<? extends E> c) | 将集合 c 中的元素 尾插到该集合中 |
E remove(int index) | 删除 index 位置元素并返回 |
boolean remove(Object o) | 删除遇到的第一个 o |
E get(int index) | 获取下标 index 位置元素 |
E set(int index, E element) | 将下标 index 位置元素设置为 element |
void clear() | 清空顺序表 |
boolean contains(Object o) | 判断 o 是否在线性表中 |
int indexOf(Object o) | 返回第一个 o 所在下标 |
int lastIndexOf(Object o) | 返回最后一个 o 的下标 |
List< E > subList(int fromIndex, int toIndex) | 截取部分 list |
- System.out.println("======迭代器1=========");
-
- ElementObservableListDecorator<Object> list;
- Iterator<String> it = list.iterator();
- while (it.hasNext()) {
- System.out.println(it.next());
- }
- System.out.println("======迭代器2=========");
- ListIterator<String> it2 = list.listIterator();
- while (it2.hasNext()) {
- System.out.println(it2.next());
- }