第七章。容器和泛型

编程技术  /  houtizong 发布于 3年前   89
    首先说说容器类,Collection是容器类的根接口,List、Set、Queue是它的直接子接口。List类型允许加入重复对象,Set类型不允许加入重复对象。Map接口没有继承Collection接口,它的键对象不可重复,值对象可重复,是一对一关系。
     Set不接受重复的元素,所谓重复是指e1.equals(e2),就称e1和e2是重复元素。Set的实现类有HashSet、TreeSet、LinkedHashSet,子接口是SortSet,TreeSet就是实现了这个接口。HashSet会调用对象的hashCode()方法来获取哈希码,然后根据这个哈希码进一步计算出对象在容器中的存放位置,所以具有很好的存取和查找性能。TreeSet可以对容器中的对象进行排序,默认使用自然排序(使用自然排序时,只能向TreeSet容器加入同类型的对象),也可以实现Comparable接口,使用compareTo()方法来进行排序,x.compareTo(y):如果返回值为0,则表示x和y相等;如果返回值大于0,表示x>y。指定排序:java.util.Comparator<Type>接口提供具体的排序方式,<type>指定被比较的对象的类型,Comparator接口的compare(T o1,To2)方法用来比较两个对象的大小。
      List像数组一样也能建立数字索引与对象的关联,表达的是数据结构中线性表的概念,容器中允许存放重复对象,List接口的常用实现类有:ArrayList和LinkedList.
ArrayList代表长度可变的数组,允许对元素进行随机的快速访问,但是向其中插入和删除的速度较慢。ArrayList是线程不安全的,若要成为线程安全,可用:List list=Collections.synchronizedList(new ArrayList());LinkedList在内部是采用双向循环链表实现的,插入和删除元素的速度较快,随机访问速度则较慢,LinkedList可以作为堆栈、队列、双向队列来使用,同样,LinkedList也是线程不安全的。
      Map(映射)是一种把键对象和值对象进行映射的集合,而值对象仍可以是Map类型,这样就可以形成多级映射。HashMap是Map接口的实现类,[color=red]允许使用null键和null值。迭代collection视图所需的时间与HashMap实例的“容量”及其大小(键值映射关系数)之和成比例[/color],所以,如果迭代性能很重要,则不要将初始容量设置得太高或将加载因子设置得太低。
HashMap的实例有两个参数影响其性能:初始容量和加载因子。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行rehash操作(重建内部数据结构),从而哈希表将具有大约两倍的桶数,默认的加载因子是0.75。可能你会想到把加载因子设置高点,但这虽然减少了空间开销,但也同时增加了查询成本。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少rehash操作次数。如果有很多映射关系要存储在HashMap实例中,则相对于按需执行自动rehash操作以增大表的容量来说,使用足够大的初始容量创建它将使得映射关系能更有效地存储。同样,HashMap也不是线程安全的。  TreeMap实现了SortedMap接口,可以确保键处于排序状态,有些方法比较特殊:firstKey():返回第一个键,lastKey,subMap(fromKey,toKey):生成此Map的子集。tailMap(fromKey):生成此Map的子集,由键大于或等于fromKey的所有键值组成。
       接着到泛型,泛型实现了参数化类型的概念,这个术语的意思是“适用于许多种的类型”,目的是希望类或方法能够具备最广泛的表达能力。
       泛型用于容器类中可以在编译期对容器中的类型进行类型检查,加入或取出都不用强制转换。
       在泛型类中可以使用通配符(?)和受限通配符(extends、super)。extends限制其类型必须是extends后面的类或接口的子类或实现类(接口),如:A<? extends List> a=new A<ArrayList>();。super则限制其类型必须是super后面的类的父类。如:A<? super LinkedHashSet> a=new A<HashSet>();(HashSet是LinkedHashSet的父类)。

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客