Collection体系、遍历、泛型,
分享于 点击 22519 次 点评:71
Collection体系、遍历、泛型,
Collection体系(集合类,它是一个接口): 两个子类: List、Set(这两个子类也是接口) List有两个常用子类:(值,不唯一,允许有重复的元素,都是有序的) ArrayList: 数组结构,查找快,增删慢。线程不安全。 LinkedList: 有序,链表结构,查找慢,增删快。线程不安全。 Vector:(以过时) 有序,数组结构,查找增删都慢。线程安全。 Set:有三个常用子类(值,唯一,不允许有重复的元素) HashSet: 底层是哈希表结构,无序。 如何保证唯一性的? 由HashCode和equals方法保证唯一性的。 顺序: 先判断HashCode方法 相同:判断equals方法,相同:不添加。不相同:添加 不相同:添加 LinkedHashSet: 有序,底层是链表加哈希表结构,由链表保证有序,哈希表保证唯一。 TreeSet: 底层是二叉树结构,有一定的自然排序算法。 是如何保证元素的唯一性的? 根据返回值是否是0判断是否重复。并且还要保证元素有序: 根据返回值是正数还是负数。 实现方案:添加比较器 元素具备比较器:实现Comparable接口,重写CompareTo方法。 集合具备比较器:实现Comparator接口,重写Compare方法。 List和Set集合遍历的几种方式: Set集合是没有普通for的遍历方式 普通for、增强for、迭代器 普通for格式: for(int i = 0; i < list.size(); i++){} 增强for格式: for(类型 变量名 : 集合名){} 迭代器格式:(提供了两个方法:hasNext和next方法) Iterator<类型> it = 集合名.iterator(); 什么时候使用? 需要操作集合的角标的时候使用普通for 只需要遍历集合的时候使用增强for或迭代器。 泛型: 泛型的通配符为:? <? extends T> 向下限制,只可以传递T类型或T类型的子类 <? super T> 向上限制,只可以传递T类型或T类型的父类 泛型的定义:定义泛型可以在类中预支地使用未知的类型。可定义在类、方法或接口上。 泛型的使用:一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。 泛型的好处: 将运行时期的ClassCastException,转移到了编译时期变成了编译失败。 避免了类型强转的麻烦。 泛型的格式: 类上: 修饰符 class 类名<代表泛型的变量> { } 使用格式: 使用格式:创建对象时,确定泛型的类型 接口上: interface 类名<代表泛型的变量>{ } 使用格式: 1、定义类时确定泛型的类型 2、始终不确定泛型的类型,直到创建对象时,确定泛型的类型 方法上: 修饰符<> 返回值类型 方法名(泛型变量 变量名){} 使用格式: 使用格式:调用方法时,确定泛型的类型相关文章
- 暂无相关文章
用户点评