认识线性表和顺序表
线性表:
是 n 个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
线性表:
在逻辑上是线性结构,也就是说是在连续的一条直线上。但是物理结构上不一定是连续的,线性表在物理上存储时筒仓事宜数组和链式结构的形式存储。
顺序表的各种操作
扩容操作
private void realloc() {
capacity = 2 * capacity;
String[] newData = new String[capacity];
for (int i = 0; i < data.length; i++) {
newData[i] = data[i];
}
data = newData;
}
增加
尾插
public void add(String elem) {
if (size > capacity) {
realloc();
}
data[size] = elem;
size++;
}
按位置插入
public void add(int index, String elem) {
if (index < 0 || index > size) {
return;
}
if (size > capacity) {
realloc();
}
for (int i = size - 1; i >= index; i--) {
data[i + 1] = data[i];
}
data[index] = elem;
size++;
}
删除
按元素位置删除
public String remove(int index) {
if (index < 0 || index > size) {
return null;
}
String result = data[index];
for (int i = index; i <= size - 1; i++) {
data[i] = data[i + 1];
}
size--;
return result;
}
按元素值删除
public boolean remove(String elem) {
int index = 0;
for (; index < size -1; index++) {
if (data[index].equals(elem)) {
break;
}
}
if (index > size) {
return false;
}
for (int i = index; i < size - 1; i++) {
data[i] = data[i + 1];
}
size--;
return true;
}
按照下标取元素
public String get(int index) {
if (index < 0 || index > size) {
return null;
}
return data[index];
}
判断元素是否存在
public boolean contains(String elem) {
for (int i = 0; i < size; i++) {
if (data[i].equals(elem)) {
return true;
}
}
return false;
}
查找元素位置
从前往后
public int indexOf(String elem) {
for (int i = 0; i < size; i++) {
if (data[i].equals(elem)) {
return i;
}
}
return -1;
}
从后往前
public int lastIndexOf(String elem) {
for (int i = size - 1; i >= 0; i--) {
if (data[i].equals(elem)) {
return i;
}
}
return -1;
}
清空顺序表
public void clean() {
size = 0;
}
迭代能力和迭代器
每种容器(Collection)都是具备迭代能力(Iterable)的。所以,每种容器都自带一个方法,返回一个合适的迭代器(Iterator)以对容器进行无视实现差别的迭代。
迭代器:也是一个类,用途就是帮助遍历集合类,对于 List 来说,由于能取下标,迭代器不是很特别,对于 Set, Map, 此时就特别依赖迭代器来进行遍历了 。
使用迭代器遍历
public static void main(String[] args) {
List<String> arrayList = new ArrayList<>();
arrayList.add("c");
arrayList.add("c++");
arrayList.add("java");
arrayList.add("python");
Iterator<String> iterator = arrayList.iterator();
// 再通过 while 循环来进行遍历
while (iterator.hasNext()) {
String e = iterator.next();
System.out.println(e);
}