迭代器
1、在迭代器中使用迭代,然后直接使用,<集合>.remove(迭代出的元素)
异常:ConcurrentModificationException
安全隐患
解决:不能够在迭代器中使用集合自己的remove方法
用iterator.remove()来代替
remove():删除当前游标所在位置的元素
不会改变游标位置
2、迭代器的简化->增强for循环 forEach
for(每一次迭代出来的元素临时变量:要迭代的集合/数组{}
例如:for(String s : col){
System.out.println(s);
}
注意:forEach只能遍历元素使用,不能迭代移除
3、List:特点->有序的【有下标】,允许重复元素
有序:添加顺序就是访问顺序
排序:由小到大,由大到小
List的遍历/迭代: 可以用Iterator
for
forEach
4、Collection:toArray
Object[ ] toArray():无参,返回值类型永远都是Object[ ],和泛型无关
T[ ] toArray(T[ ]):参数->一个具体的类型的数组,作用只是为了提供类型
5、Collection: remove
remove(Object o)
原理: 遍历集合, 将每一个元素.equals(o)
contains(Object o)
6、java.util.Arrays: 数组相关工具类
toString() -> 打印数组内容
sort(arr) -> 数组排序
copyOf() -> 数组复制
asList(arr) -> List 将数组转换成集合
-> 本质上还是数组, 数组长度不可变
7.java.util.Collections: 集合相关的工具类
sort(List) -> 给List排序, 所有元素必须是可比较的
java.lang.Comparable -> 接口, 可比较的
int compareTo(T t)
下面展示一些 内联代码片
。
// A code block
var foo = 'bar';
public class IteratorDemo {
public static void main(String[] args) {
Collection<String> col = new ArrayList<>();
col.add("q");
col.add("w");
col.add("e");
col.add("r");
col.add("t");
Iterator<String> it = col.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
it.remove();
}
for(String a : col){
System.out.println(a);
}
}
}
有序二叉树
有序二叉树:不允许重复
特点:左节点<父节点<右节点
中间遍历:左节点,中间节点[根节点],右节点
遍历结果:升序
下面展示一些 内联代码片
。
// A code block
var foo = 'bar';
public class Tree {
private class Node{
private int data;
private Node right;
private Node left;
public Node(int data){
this.data = data;
}
private Node root;
public void add(int a){
if(root == null){
root.data = a;
return;
}
Node node = root;//记录每一次的当前节点
Node parentNode;//记录每一次node的父节点
while(true){
parentNode = node;
if(node.data > a){
node = node.left;
if(node == null){
parentNode.left = new Node(a);
return;
}
}else if(node.data < a){
node = node.right;
if(node == null){
parentNode.right = new Node(a);
return;
}
}
}
}}
}