015_集合框架

假装没事ソ 提交于 2019-12-11 08:40:27

集合

由数组引入,和数组进行对比分析

  • 概念:对象的容器,存储对象的对象,克代替数组
    • 数组本身也是对象,可以存对象,集合也可以,因此是一种对数组的替代。
  • 特点:容器的工具类,定义了对多个对象进行操作的常用方法。
    • 集合比数组功能更强大,指的是封装了很多操作对象的方法,因此可以作为一个工具使用。

位置:java.util.* 包下

总结:集合是什么?集合是对象的容器,同时集合也是我们对数据操作时的工具!

集合基础

集合的体系

Collection父接口

Collection的抽象方法,是所有子接口以及实现类共性的方法,具有最大的普遍性

List集合

list子接口的特点与特有方法

通过查看源码的形式,验证说明list底层是数组实现的形式,进而结合数组特点掌握其方法

--------------------------——————————————————————-----------------------

List作为Collection的子接口,有三个实现类

ArrayList:主要实现类。语法结构: ArrayList list = new ArrayList();
特点:①数组结构实现,查询快,增删慢(增删一个元素,后面的元素都要移动位置)
②JDK1.2版本,运行效率块、效率不安全(对比另一个实现类Vector的add方法讲解)
Vector:
特点:①数据结构实现,查询快,增删慢(方法和ArrayList类似);
 ②JDK1.0版本,运行效率慢、线程安全(主要区别在于一个关键字synchronized,可举例说明线程安全和效率的关系)
LinkedList:
链表结构实现,增删快,查询慢。通过图示对比链表和顺序表的区别

Ps:数组里的数据类型是一致的,而集合中的数据类型是object,这样在应用中是否存在问题?

通过案例说明问题,即:往一个集合中添加各种类型的数据,然后求和,此时会报异常。引出知识点:泛型

泛型

  • 概念: 参数化类型、类型安全的集合,强制集合元素的类型必须一致。

  • 特点:

    • 编译时即可检查,而非运行时抛出异常。

    • 访问时,不必类型转换(拆箱)。

    • 不同泛型之间引用不能相互赋值,泛型不存在多态。

泛型的高级应用

实例泛型接口泛型静态泛型。

实例泛型 举例:
class MyClass<E>{//此时的E就是泛型的一个占位符,源码中常见的有 E T K V 等
    //定义一个实例方法,把泛型作为参数传递
    public void m1(E e){
    }
}
实例泛型在创建对象时具体指明泛型的类型 比如:
MyClass<Integer> mc = new MyClass<Integer>();//此时的泛型就指定为整型
mc.m1(123);
//同样可以指定为其它类型
MyClass<Double> mc2 = new MyClass<Double>();
mc2.m1(12.3);
接口泛型 举例:
interface MyInterface<T>{
    void m2(T t);//把泛型类型作参数传递给抽象方法
} 
class MyImplClass implements MyInterface<Byte>{ //在写实现类的时候指明具体的泛型类型
    @Override
    public void m2(Byte t){
    }
}
 静态泛型 举例:
 class MyStaticClass{
    public static<E> void method(E e){
       System.out.println(e.getClass());//会打印具体传递过来形参的值
    }
}
//在实际调用静态方法时,把具体类型传递
MyStaticClass.method(123); //class java.lang.Integer
MyStaticClass.method(12.3);//class java.lang.Double
//此时什么类型都可以接收,但在方法内部会有区别

另,可对静态泛型进行约束
 class MyStaticClass{
    public static<E extends Animal & Comparable> void method(E e){
    // 此时能传进来的类型必须满足两个条件即:继承Animal类,并且实现了Comparable接口(可排序),否则编译错误
    }
}
1)<? extends T>:表示T类或者T类的子类 2)<? super T>:表示T类或者T类的父类 3)<?>:表示任意类型

Collections工具类

  • 概念: 集合工具类,定义除了存取以外的集合常用方法。

  • 方法:

    • public static void reverse(List<?> list) //反转集合中元素的顺序

    • public static void shuffle(List<?> list) //随机重置集合中元素的顺序

    • public static void sort(List<?> list) //升序排序(元素类型必须实现Comparable接口)

代码展示这三个方法,其中sort方法要联想数组的排序一起学习。Arrays 里 只是处理数组类型的排序,集合工具更强大。

Collections.sort() 是对集合元素的排序,源码如下:
 public static <T extends Comparable<? super T>> void sort(List<T> list) {//要求传递过来的必须是实现排序接口
        list.sort(null);
       }
 //Integer String 都是实现了Comparable接口的(参考源码)
 //可以举一个自定义的类,没有实现Comparable接口,此时就不能作为参数传递进来

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!