## 1.6 遍历

// (1)通过下标来进行遍历
System.out.println("通过下标来遍历:");
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
// (2)通过迭代器来进行遍历
System.out.println("通过迭代器来遍历:" );
// 先通过 iterator 方法获取到迭代器对象
Iterator<String> iterator = arrayList.iterator();
// 再通过 while 循环来进行遍历
while (iterator.hasNext()) {
String e = iterator.next();
System.out.println(e);
}
// (3)for-each 来进行遍历(本质上是基于迭代器)
System.out.println("通过 for-each 进行遍历:");
for (String e : arrayList) {
System.out.println(e);
}


## 二、 实现自己的 MyArrayList

public class MyArrayList {
private String[] data = null;
// 当前顺序表中有效的元素个数
private int size = 0;
// 当前顺序表中的最大容纳元素个数,如果 size 超过了capacity 就需要扩容
private int capacity = 100;

public MyArrayList() {
    data = new String[capacity];
}

@Override
public String toString() {
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("[");
    for (int i = 0; i < size; i++) {
        stringBuilder.append(data[i]);
        if (i < (size - 1)) {
            stringBuilder.append(",");
        }
    }
    stringBuilder.append("]");
    return stringBuilder.toString();
}

// 扩容
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;
}

// 1.把元素插到顺序表末尾
public void add(String elem) {
    if (size >= capacity) {
        realloc();
    }
    data[size] = elem;
    size ++;
}
// 时间复杂度:O(N)

// 2.把元素插入到任意中间位置
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 ++;
}

// 3.按照下标位置删除元素
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];
    }
    return result;
}

// 4.按照元素的值删除
public boolean remove (String elem) {
int index = 0;
for (; index < size; index++) {
    if (data[index].equals(elem)) {
        break;
    }
}
if (index >= size) {
    return false;
}
for (int i = index; i < size; i++) {
    data[i] = data[i + 1];
}
size --;
return true;
}
    // 5 根据下标获取元素
public String get (int index) {
    if (index < 0 || index > size) {

// return null;
// 也可以抛出一个异常
throw new MyArrayListIndexOutOfRangeException("下标越界了! index = " + index);
}
return data[index];
}

// 6 根据下标修改元素
public void set (int index,String elem) {
    if (index < 0 || index > size) {
        return;
    }
    data[index] = elem;
}

// 7 判断元素是否存在
public boolean contains (String elem) {
    for (int i = 0; i < size; i++) {
        if (data[i].equals(elem)) {
            return true;
        }
    }
    return false;
}

// 8 查找元素位置
public int location (String elem) {
    for (int i = 0; i < size; i++) {
        if (data[i].equals(elem)) {
            return i;
        }
    }
    return -1;
}

// 9 查找元素位置,从后往前找
public int locationFromTail (String elem) {
    for (int i = size - 1; i > 0; i--) {
        if (data[i].equals(elem)) {
            return i;
        }

总结

总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。

如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。

这些视频如果需要的话,可以无偿分享给大家,点击这里即可免费领取

增删改查的基本操作:实现MyArrayList,缓存架构技术