初识集合结构体系
A.集合分为单列集合和多列集合
*单列集合(Collection)
List集合:Vector、ArrayList、LinkedList...
Set 集合:HashSet、LinkedHashSet、TreeSet....
*双列集合(Map:)
Map 集合:HaspMap、Hashtable、TreeMap、LinkedHashMap、Properties...
B.图片详解
C.集合与数组
1.数组(存放任意类型,长度固定)
2.集合(存放对象类型,长度可变)
迭代器 Iterator
1、获取迭代器对象
Iterator<E> iter = c.iterator();
ListIterator<E> listIter = ((ArrayList<E>) c).listIterator();
2、使用迭代器方法
iter.hasNext();
E e = iter.next();
3、模板案例(快捷键 itit 回车)
Collection<String> c = new ArrayList<String>();
c.add("迪丽热巴");
c.add("古力娜扎");
c.add("蒙娜丽莎");
Iterator<String> iter = c.iterator();
while (iter.hasNext()) {
String next = iter.next();
System.out.println(next);
}
Iterator<String> listIter = ((ArrayList<String>) c).listIterator();
while (listIter.hasNext()) {
String next = listIter.next();
if(next.equals("蒙娜丽莎")){
listIter.remove();
((ListIterator<String>) listIter).add("玛尔扎哈");
}
}
System.out.println(c.toString());
4、迭代器的注意事项
针对:iterator()、for each这两种方法
不能在遍历集合的过程当中进行修改的操作,否则会出现并发修改异常
并发修改异常: ConcurrentModificationException
泛型
1、泛型的好处
A.提前检查(运行时可能出现的类型转换异常,提前到编译时是否通过)
B.简洁代码(不需要手动向下转型,快捷键直接提示出来类型)
2、泛型应用场景
A.泛型类
a.定义格式:
修饰符 class 类名称<泛型>{ }
b.使用格式:(创建对象)
类名称<具体类型> 对象名称 = new 类名称<具体类型>();
B.泛型方法
a.定义格式:
修饰符 <泛型> 返回值 方法名称 (参数){ 方法体; return 返回值; }
b.使用格式:(调用方法)
具体返回值类型 返回值 = 方法名称(具体参数);
C.泛型接口
a.定义格式:
修饰符 interface 接口名称<泛型>{ }
b.使用格式:(实现类或者创建实现类对象时候)
第一种:修饰符 class 类名称 implements 接口名称<具体类型>{ }
第二种:类名称<具体类型> 对象名称 = new 类名称<具体类型>();
D.泛型通配符
a.含义:
不知道使用什么数据类型的时候,泛型可以使用 ?
b.格式:
Collection<?> 可以传递各种泛型类型的对象
例如: 这些都可以传递 Collection<Object> Collection<String> Collection<Integer>
c.高级使用: (Number是Integer的父类)
Collection<? extends Number> 只能接收 Number类型以及子类类型. (专业术语"泛型的上限")
Collection<? super Number> 只能接收 Number类型以及父类类型. (专业术语"泛型的下限")