ArrayList集合
初始数组长度是10, 可以自动扩容
- 产生副本 遍历的是副本
- 遍历副本的时候, 修改的是源集合, 删除副本的元素
- 将副本替换掉原集合
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
for (String string : list) {
if(string instanceof String) {
list.remove(string);
}
}
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String obj = it.next();
if(obj instanceof String) {
it.remove();
}
}
// 遍历的就是原集合,不是副本
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
if(str instanceof String) {
list.remove(str);
// 产生过删除操作的位置,则 i--, 重新检查一遍
i--;
}
}
System.out.println(list);
}
}
List : 有序并且允许重复
LinkedList : 有序并且允许重复
底层数据结构是双向链表 堆栈结构
优点: 插入和删除的时候 效率高
缺点: 遍历和修改的时候 效率低
public class Test2 {
public static void main(String[] args) {
//创建LinkerList集合对象
LinkedList<String> list = new LinkedList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//头和尾的操作
list.addFirst("z");
list.addLast("y");
System.out.println(list);
String first = list.getFirst();
String last = list.getLast();
System.out.println(first);
System.out.println(last);
list.offerFirst("z");
list.offerLast("y"