Collection、泛型

01.第一章:Collection集合_集合概述

1).我们知道“集合类”的作用:存储大量对象(引用)。
2).数组的缺点:长度固定;
   集合的优点:长度可变;操作比较方便;
3).Java内部提供了大量的“集合类”--按照不同的“存、取方式”。每种集合类的存、取的方式都不相同,就会导致对于“集合内的元素”的“添加、修改、删除、查询”等操作的效率不同。有些存储方式会导致:查询慢,但添加、删除元素快;但有些存储方式会导致:查询快,但添加、删除元慢。这些“存储方式”--数据结构
4).常见的数据结构:
    1).数组--ArrayList:查询快;增删慢;
    2).链表--LinkedList:查询慢;增删快
    3).哈希表--HashSet:查询、增删都快;但所有操作都需要产生一个哈希值;
    4).树--TreeSet:对元素排序;
    5).图--Map
    6).栈--后进先出;
    7).队列--先进先出;
5).Java集合体系结构图:

这里写图片描述

02.第一章:Collection集合_Collection接口中的常用功能:

添加:
1).public boolean add(E e) : 添加一个元素;
    添加成员返回:true,对于List集合,永远返回true;
       对于Set集合,当添加重复元素时,返回:false;
删除:
2).public void clear():清空集合;
3).public boolean remove(Object o):在集合中删除元素o,成功删除返回true,如果
                           集合中没有此元素,返回false。
判断:
4).public boolean contains(Object o):判断集合中是否存在对象o,
                          存在返回true,否则返回false。

这里写图片描述

5).public boolean isEmpty():判断集合是否为“空集合”
获取:
6).public int size():返回集合内元素的数量;
7).public Object[] toArray():将集合内的所有元素转换为Object数组;
8).public Iterator iterator():获取一个迭代器;用于遍历集合元素的一个对象;

03.第二章:迭代器_迭代器Iterator接口的使用:

public class Demo {
public static void main(String[] args) {
    Collection<String> list = new ArrayList<>();
    list.add("孙悟空");
    list.add("珠宝街");
    list.add("铁扇公主");
    list.add("红孩儿");
    Iterator<String> it = list.iterator();
    while (it.hasNext()) {
        System.out.println(it.next());
    }
}

}

04.第二章:迭代器_迭代器的实现原理:

这里写图片描述

常见错误:
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("孙悟空");
list.add("珠宝街");
list.add("铁扇公主");
list.add("红孩儿");

Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String s = it.next();
    System.out.println(it.next());
}

}

05.第二章:迭代器_增强for:

1).作用:
    1).遍历“数组”:
        int[] arr = {1,43,24,32,54};
        for(int n : arr){//编译成:普通for循环
            System.out.println(n);
        }
    2).遍历“Collection集合”:
ArrayList<String> list = new ArrayList<>();
list.add("孙悟空");
list.add("猪八戒");
list.add("沙和尚");
list.add("唐三藏");
for(String s : list){//编译成:迭代器
System.out.println(s);

}

06.第三章:泛型_泛型概述及好处:

ArrayList<**String**> list = new ArrayList<>();
好处:可以约束这个集合中只能存储String类型,如果存储其它类型,编译器直接报错;可以减少很多我们在使用集合时容易发生的类型转换错误。

07.第三章:泛型_定义和使用含有泛型的类:

1).定义“支持泛型的类”:
public class MyArrayList<E> {
public void add(E e){
}
public E get() {
    return null;
}
}
2).使用:
public static void main(String[] args) {
         MyArrayList<String> list = new MyArrayList();
     list.add(string类型);
     list.get();//String类型;     
}
3).“定义泛型”的语法:
    class MyArrayList<E>{
    }
    格式说明:
    1).<E>:表示定义“泛型”;
    2).E:是随意定义,可以是一个字符,也可以是多个字符;
    3).可以同时定义“多个泛型”,中间用“,”号隔开;
                public class MyArrayList<E,A,B,C> {
                    public void add(E e){
            }
                    public E get() {
                       return null;
            }    
                    public void show(A a,B b){        
            }
                    public void fun(C c){        
            }
         }

08.第三章:泛型_含有泛型的方法:

1).示例代码:
public class MyArrayList {
public static <T> void show(T t1,T t2,T t3,T t4,T t5){
    System.out.println("t1 = " + t1);
    System.out.println("t2 = " + t2);
}
}
     测试类:
       public class Demo {
           public static void main(String[] args) {
           MyArrayList.<Integer>show(10,20,30,40,50);
           MyArrayList.<String>show("aa","bb","cc","dd","ee");
     }
}

09.第三章:泛型_含有泛型的接口:

定义具有泛型的接口,同泛型类一样:
    public interface IA<E>{
        public void show(E e);
    }

10.第三章:泛型_泛型通配符:

1).<?> : 表示:具有“任何泛型”的集合都可以:
public static void main(String[] args) {
Collection<Student> stu = new ArrayList<>();
print1(stu);

Collection<Teacher> tea = new ArrayList<>();
print1(tea);

Collection<String> str = new ArrayList<>();
print1(str);

}

 //定义一个方法,可以接收"具有任何泛型的集合对象"
 public static void print1(Collection<?> list){

}
2).<? extends E> : 表示:具有“E或者E的任何子类泛型”的集合都可以:
 public static void main(String[] args) {
    Collection<Student> stu = new ArrayList<>();
    print2(stu);//OK的

Collection<Teacher> tea = new ArrayList<>();
print2(tea);//OK的

Collection<String> str = new ArrayList<>();
print2(str);//错误

}

 //定义一个方法,可以接收"具有Student和Teacher泛型的集合"
 public static void print2(Collection<? extends Person> list){

 }
3).<? super E> : 表示:具有“E或者E的任何父类泛型”的集合都可以:
public static void main(String[] args) {
    Collection<Student> stu = new ArrayList<>();
    print3(stu);//OK的

    Collection<Teacher> tea = new ArrayList<>()
 //      print3(tea);//编译错误

    Collection<Person> per = new ArrayList<>();
    print3(per);//OK的

    Collection<Object> obj = new ArrayList<>();
    print3(obj);//OK的
}

//定义一个方法,可以接收"具有Student和Person泛型的集合"
public static void print3(Collection<? super Student> list){        
}

学习目标总结:
01.能够说出集合与数组的区别
1).数组:长度固定;可以基本类型数组、引用类型数组;
2).集合:长度可变;只能存储“引用类型”;
02.说出Collection集合的常用功能
1).添加:
    public boolean add(Object o):
2).删除:
    public void clear():
    public boolean remove(Object o):
3).判断:
    public boolean contains(Object o):判断参数o在集合中是否存在;
    public boolean isEmpty():判断集合是否为“空”;
4).获取:
    public int size():获取集合内元素的数量;
    public Object[] toArray():将集合转换为数组;
    public Iterator iterator():获取一个“迭代器”:

03.能够使用迭代器对集合进行取元素
Collection<String> list =new ArrayList<>();
...
Iterator<String> it = list.iterator();
while(it.hasNext()){
    System.out.println(it.next());
}
04.能够说出集合的使用细节
Collection<String> list = new ArrayList<>();
list.add(...);
list.add(...);
for(String s : list){//增强for,底层是:迭代器
    System.out.println(s);
}
05.能够使用集合存储自定义类型
Collection<Student> list = new ArrayList<>();
list.add(new Student("黄磊",18));
......
......
for(Student stu : list){
    System.out.println(stu);
}
06.能够使用foreach循环遍历集合
for(Student stu : list){
    System.out.println(stu);
}

07.能够使用泛型定义集合对象
ArrayList<String> list = new ArrayList();
08.能够理解泛型上下限
1).泛型的上限:<? extends Student>:具有Student或者Student的子类泛型;
2).泛型的下限:<? super Student> : 具有Student或者Student的父类类型;
09.能够阐述泛型通配符的作用
1).泛型通配符的作用:规定泛型的范围;
    1).<?> : 可以是任何泛型;
    2).<? extends E> :上限为E
    3).<? super E> : 下限为E

猜你喜欢

转载自blog.csdn.net/zzz323666/article/details/81606745