首先说说容器类,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的父类)。
分享到:
相关推荐
JAVA语言与编程第7章容器和泛型.ppt
第11章泛型和容器类(第7版)
**第十三章 泛型程序设计** 泛型是Java编程语言中的一个重要特性,引入于Java 5.0,它允许在定义类、接口和方法时使用类型参数,从而提高了代码的类型安全性和重用性。泛型的主要目标是提供一种方式来限制容器对象...
第13章 容器和泛型.pptx 第14章 流与文件(1).pptx 第14章 流与文件(2).pptx 第15章 网络编程.pptx 第1章 Java概述.pptx 第2章 Java基础.pptx 第3章 数组.pptx 第4章 类和对象(1).pptx 第4章 类和对象(2)....
泛型通配符允许我们使用未知的具体类型来操作泛型容器。例如,`?`表示任意类型,而`? extends Number`则表示任意`Number`的子类型。 ```java public static void printNumbers(List<? extends Number> numbers) { ...
泛型算法是C++标准库中的重要组成部分,它们是一组可应用于不同类型容器和元素的通用操作,不依赖于特定容器的实现,而是依赖于元素的迭代器操作。这些算法通常定义在`<algorithm>`、`<iostream>`和`<numeric>`等...
"第7章 容器和泛型.ppt"涵盖了Java集合框架,包括List、Set、Map等容器,以及泛型的使用。泛型是Java 5引入的新特性,能帮助你在编译时期避免类型转换错误,提高代码的类型安全性。 "第8章 Java输入.ppt"讲解了I/O...
泛型是Java编程语言中的一个重要特性,它引入于JDK 5.0,主要用于提高代码的类型安全性和重用性。泛型允许我们在定义类、接口和方法时,使用一种称为类型参数的占位符,而不是具体的类型。这样,我们就可以在编译时...
通过以上内容的学习,我们不仅理解了泛型的基本概念和使用方法,还深入了解了Java集合类的相关知识,特别是`List`接口及其具体实现类的特点和使用场景。这对于日常开发中高效管理和操作数据具有重要意义。
Java泛型是自Java SE 5.0引入的一项重要特性,它允许在定义类、接口和方法时使用类型参数,从而增强了代码的类型安全性和可读性。泛型的使用可以减少强制类型转换的麻烦,并在编译时就发现可能存在的类型错误。本...
在这个“Java基础入门自学课件 第11章 泛型”中,我们可以期待学习到以下几个核心知识点: 1. **泛型的基本概念**:泛型允许我们在定义类、接口和方法时指定一种或多种类型参数,这样在实际使用时可以传入具体的...
【容器API概述】 容器API是Java编程语言中用于管理和组织对象的重要部分,它包含了一系列...泛型和自动装箱/拆箱进一步简化了代码编写,提高了代码的可维护性。理解并熟练使用这些容器和概念,是Java开发中的关键技能。
在这个系列课程的第七部分,我们将深入探讨泛型编程的概念、应用以及如何在实际项目中有效地利用它。 泛型编程的核心在于其类型参数化,这意味着可以创建泛型函数或泛型类,这些实体可以处理任何类型的数据,只要...
第7章 deque双端队列容器 第8章 list双向链表容器 第9章 slist单向链表容器 第10章 bit_vector位向量容器 第11章 set集合容器 第12章 multiset多重集合容器 第13章 map映照容器 第14章 multimap多重映照容器 第15章 ...
在Dart编程语言中,泛型是一种...总的来说,Dart中的泛型和库系统极大地提高了代码的复用性和灵活性,使得开发者能够编写出更强大且类型安全的程序。通过熟练掌握这些概念,可以更好地利用Dart的特性,提高开发效率。
《VC++面向对象与可视化程序设计(第三版)黄维通 第七章》是一本深入讲解使用Microsoft Visual C++进行面向对象编程和可视化程序开发的教材。黄维通教授是该领域的专家,他的这本书旨在帮助读者掌握C++的面向对象...
### C++ STL 泛型函数库之 Vector 容器详解 在C++标准模板库(STL)中,`vector`是一种非常重要的动态数组容器。它提供了动态调整大小的能力,并且支持随机访问,使得其在很多场景下都能发挥出高效、灵活的特点。下面...
第11章泛型和容器类(第7版).pptx 第12章注解、反射、内部类、匿名内部类与Lambda表达式(第7版).pptx 第13章图形界面设计(第7版).pptx 第14章事件处理(第7版).pptx 第15章绘图与动画程序设计(第7版).pptx 第16章 多...
在C++程序设计的学习过程中,第七章通常涵盖了高级主题,如类、对象、继承、多态等核心概念。这些概念是面向对象编程的基础,对于理解C++的强大功能至关重要。在这个压缩包"study07"中,我们可以期待找到一系列示例...