Java学习笔记-3
Iterator迭代器
迭代:Collection集合元素的通用获取方式,循环判断集合中是否有目标元素并提取
Iterator接口
- 在util下
- hasNext方法判断集合中是否有下一个元素,返回布尔值
- next方法返回迭代的下一个元素
- Collection接口下有iterator方法,返回的即为Iterator对象(同时将索引指向-1位置),用Iterator接口接收(多态),泛型与集合相同
泛型
<泛型类型名>
1.泛型类
在类名后加,方法的返回值也为E
创建对象时要制定泛型类型,即与集合的创建方式相同
2.泛型方法
泛型类型名加在方法修饰符与返回类型之间
3.泛型接口
与泛型类相似,接口的实现类要制定泛型类型(比如implements interface)
如果是泛型类实现泛型接口就可以不用指定
4.泛型通配符
? 代表任意数据类型
适用于作为参数传递时,接收一个任意通配泛型形参做迭代,获取的对象只能说Object类型
5.泛型限定
1)泛型上限限定
? extends E
使用的泛型只能是E及其子类
比如E是Number,使用的就可以是Integer
2)泛型下限限定
? super E
使用的泛型只能是E及其父类
package day2;
import java.util.*;
public class day2<E> {
public void setName(E name)
{
this.name = name;
}
public E getName()
{
return this.name;
}
public static <M> void printVar(M m)
{
System.out.println(m);
}
//泛型通配符
public static void printArray(ArrayList<?> arr)
{
Iterator<?> it = arr.iterator();
while(it.hasNext())
{
Object o = it.next();
System.out.println(o);
}
}
private E name;
public static void main(String args[]) {
//迭代器
Collection<String> coll = new ArrayList<>();
coll.add("AAA");
coll.add("BBB");
coll.add("CCC");
coll.add("XXX");
Iterator<String> it = coll.iterator();
// while(it.hasNext())
// {
// System.out.println(it.next());
// }
for (Iterator<String> it2 = coll.iterator(); it2.hasNext(); ) {
System.out.println(it2.next());
}
System.out.println();
//泛型类
day2<String> obj1 = new day2<String>();
obj1.setName("AAA");
System.out.println(obj1.name);
day2<Integer> obj2 = new day2<Integer>();
obj2.setName(111);
System.out.println(obj2.name);
day2<Character> obj3 = new day2<Character>();
obj3.setName('X');
System.out.println(obj3.name);
//泛型方法
day2.printVar("静态泛型方法");
//泛型接口
MyInterfaceImpl1 impl1 = new MyInterfaceImpl1();
impl1.mth("泛型类实现泛型接口");
new MyInterface<String>() {
@Override
public void mth(String s) {
System.out.println(s);
}
}.mth("匿名对象实现泛型接口");
System.out.println();
//泛型通配符方法
day2.printArray((ArrayList)coll);
}
}
package day2;
//泛型接口
public interface MyInterface<E> {
public abstract void mth(E e);
}
package day2;
//泛型接口实现类
public class MyInterfaceImpl1<E> implements MyInterface<E>{
@Override
public void mth(E e)
{
System.out.println(e);
}
}
数据结构
双向链表中节点也会记录上一个节点的地址(通过第二条链)
二叉树
分支不能超过两个
1.排序树/查找树
为二叉树,左子树小,右子树大
每个根/节点下面都是左分支小,右分支大,适用于二分查找
2.平衡树
左子树与右子树数量相等
3.红黑树