本帖最后由 吟风流渡 于 2019-3-21 12:51 编辑
集合的概述: 1.用于存放内容的容器 集合的特点: 1.长度可变 2.只能存放引用数据类型 集合的体系 顶层父类 collection Jdk 1.5 以后提供了一个父类 Iterable --> 目的: 使用迭代器进行迭代 (屏蔽底层的不同) 两个体系的子类 List 1.有序(存进去的和取出来的顺序一致) 2.索引 : 底层是数组 3.可重复 Set 1.无序(存进去的顺序和取出来的顺序不一致) 2.无索引 :底层是哈希表 3.不可重复 常用的方法 add(E e) list.add(1) list.add(2) 经历自动装箱 remove(E e) list.remove(1) 如果删除成功返回 true 如果删除失败返回false size list.size 等同于 int [] arr 中的arr.length contains list.contains(1) 判断当前集合中是否有 1 这个元素 如果有 : 返回true 如果没有: 返回false clear :清空集合中的元素 list.clear 注意:执行完此方法后,集合还在,但集合中的元素不在了 isEmpty:判断这个集合是否为空 ,如果为空,返回true ,否则返回false 迭代器的使用规则 2.指针向后移动一位 3.增强for 循环 注意: 底层用的 是 迭代器 使用的语法 for( 集合/数组中对应的元素数据类型 变量名 : 需要遍历的数组/集合){ sout(变量名) } 举例: ArrayList<Integer> list = new ArrayList<Integer>() list.add(1); list.add(2) list.add(3) for(Integer num : list){ sout(num) } 4. 泛型定义: 将数据类型灵活的运用到类,方法,接口上,作为参数传递 泛型确定的时间:创建对象时 泛型的好处: 1.数据类型确定,省去了强转的麻烦 2.将运行时异常转换成编译器异常 泛型的缺点: 1.只能操作同一种数据类型 泛型类: 将泛型书写在Class类上 书写方式 :public class ArrayList<E> 1.在创建对象时不写泛型:默认操作就是Object ArrayList list = new ArrayList (); list.add(Object obj) 2.写了泛型 --> 泛型什么就只能操作什么 ArrayList<String> list = new ArrayList (); 泛型方法 静态泛型方法 public static <T> void method1(T t); 非静态泛型方法 public <T> void method2(T t); 泛型接口 1. 直接在接口上定义泛型 public class GenericInterfaceImpl1 implements GenericInterface<String>{} 2.public class GenericInterfaceImpl2<I> implements GenericInterface<I> 主要应用到了泛型的传递 泛型的通配符 ? 泛型的限定 上限(开发中极有可能会使用到一种方式) 和 下限 上线写法一 public static void getElement1(Collection<? extends Number> coll){} 上线写法二: public static<T extends Number> void getElement1(Collection<T> coll){} 下限 public static void getElement2(Collection<? super Number> coll){}
|