标签:链表 arrays 检查 运行时 学习 interface plain rev eth
由数组引入,和数组进行对比分析
位置:java.util.* 包下
总结:集合是什么?集合是对象的容器,同时集合也是我们对数据操作时的工具!
集合的体系
Collection的抽象方法,是所有子接口以及实现类共性的方法,具有最大的普遍性
list子接口的特点与特有方法
通过查看源码的形式,验证说明list底层是数组实现的形式,进而结合数组特点掌握其方法
--------------------------——————————————————————-----------------------
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)<?>:表示任意类型
方法:
public static void reverse(List<?> list) //反转集合中元素的顺序
public static void shuffle(List<?> list) //随机重置集合中元素的顺序
代码展示这三个方法,其中sort方法要联想数组的排序一起学习。Arrays 里 只是处理数组类型的排序,集合工具更强大。
Collections.sort() 是对集合元素的排序,源码如下: public static <T extends Comparable<? super T>> void sort(List<T> list) {//要求传递过来的必须是实现排序接口 list.sort(null); } //Integer String 都是实现了Comparable接口的(参考源码) //可以举一个自定义的类,没有实现Comparable接口,此时就不能作为参数传递进来
标签:链表 arrays 检查 运行时 学习 interface plain rev eth
原文地址:https://www.cnblogs.com/a276665092/p/12020231.html