- 浏览: 26547 次
- 性别:
- 来自: 北京
最新评论
ArrayList
TreeSet
以有序状态保持并可防止重复
HashMap
可用成对的key/value来保存与取出
LinkedList
针对经常插入或删除中间元素所设计的高效率集合(实际上ArrayList还是比较实用)
HashSet
防止重复的集合,可快速地找寻相符的元素
LinkedHashMap
类似HashMap,但可记住元素插入的顺序,也可以设定成依照元素上次存取的先后来排序。
为了让以上代码通过编译,则需要让Song实现Comparable接口,代码如下
调用单一参数的sort(List 0)方法代表由List元素上的compareTo()方法来决定顺序。因此元素必须要实现Comparable这个接口。
调用sort(List o,Comparator c)方法代表不会调用List元素的compareTo()方法,而会使用Comparator的compare()方法。这意味这List元素不需要实现Comparable接口。
3个主要接口
List 知道索引位置的集合,知道某物在系列集合中的位置,可以有多个元素引用相同的对象。
Set 注重独一无二的性质,不会有多个元素引用相同的对象。
Map key不能重复,典型的key会是String,但也可以是任何对象。
对象相等性
如果你想要把两个不同的对象是为相等的,就必须覆盖过从Object继承下来的hashCode()方法与equals()方法。
HashSet检查重复时,先检查hashCode()(用它先筛),若没有相同的,则不重复;若相同,则用equals方法确认(因为不同对象的hashCode可能相同)。
两个对象相等(equals()),则hashCode必须相等。因此如果equals()被覆盖,则hashCode()也必须被覆盖。
如果想要保持有序,使用TreeSet。TreeSet的元素必须实现Comparable或者用带Comparator参数的构造方法来创建TreeSet。
使用多态参数与泛型
数组参数:
集合参数:
以上的原因是 数组的类型是在运行期间检查的,但集合的类型检查只会发生在编译期间。
TreeSet
以有序状态保持并可防止重复
HashMap
可用成对的key/value来保存与取出
LinkedList
针对经常插入或删除中间元素所设计的高效率集合(实际上ArrayList还是比较实用)
HashSet
防止重复的集合,可快速地找寻相符的元素
LinkedHashMap
类似HashMap,但可记住元素插入的顺序,也可以设定成依照元素上次存取的先后来排序。
songList = new ArrayList<Song>()//Song是一个类; Collections.sort(songList);//参数是List接口,而List中的元素必须是实现了Comparable接口的
为了让以上代码通过编译,则需要让Song实现Comparable接口,代码如下
class Song implemets Comparable<Song>{ String title; ... public int compareTo(Song s) { return title.compareTo(s.getTitle());//String已经实现了Comparable } }
调用单一参数的sort(List 0)方法代表由List元素上的compareTo()方法来决定顺序。因此元素必须要实现Comparable这个接口。
调用sort(List o,Comparator c)方法代表不会调用List元素的compareTo()方法,而会使用Comparator的compare()方法。这意味这List元素不需要实现Comparable接口。
class ArtistCompare implements Comparator<Song> { public int compare(Song one,Sone two) { return one.getArtist().compareTo(two.getArtist()); } }
3个主要接口
List 知道索引位置的集合,知道某物在系列集合中的位置,可以有多个元素引用相同的对象。
Set 注重独一无二的性质,不会有多个元素引用相同的对象。
Map key不能重复,典型的key会是String,但也可以是任何对象。
对象相等性
如果你想要把两个不同的对象是为相等的,就必须覆盖过从Object继承下来的hashCode()方法与equals()方法。
HashSet检查重复时,先检查hashCode()(用它先筛),若没有相同的,则不重复;若相同,则用equals方法确认(因为不同对象的hashCode可能相同)。
两个对象相等(equals()),则hashCode必须相等。因此如果equals()被覆盖,则hashCode()也必须被覆盖。
如果想要保持有序,使用TreeSet。TreeSet的元素必须实现Comparable或者用带Comparator参数的构造方法来创建TreeSet。
使用多态参数与泛型
数组参数:
public void takeAnimals(Animal[] animals) { ... } takeAnimals(animals);//Animal的对象的数组 takeAnimals(dogs);//Dog是Animal的子类,dogs是Dog数组,也合法,但是Cat也可能会混入数组了,因为编译器看来,数组是Animal的,单个元素可以赋值Cat,但编译不会报错,倘若Cat真的进来了,运行期会报错,因为数组实际上是Dog数组。
集合参数:
public void takeAnimals(ArrayList<Animal> animals) { ... } takeAnimals(animals);//ArrayList<Animal>,合法 takeAnimals(dogs);//ArrayList<Dog>,不合法,因为这样有可能导致Dog的集合里混入Cat。。。
以上的原因是 数组的类型是在运行期间检查的,但集合的类型检查只会发生在编译期间。
//这样就可以传子类参数了,但是这样的话,编译器不允许加入任何东西到集合中,好吧,这样Cat就进不来了。也可以写成public<T extends Animal> void takeAnimals(ArrayList<T> list),这是为了参数多时,书写麻烦,只需一次声明就好了。 public void takeAnimals(ArrayList<? extends Animal> animals) { ... }
发表评论
-
deee
2011-12-14 01:44 943string htmlcode = "<H ... -
布局管理器
2011-06-24 11:33 707布局管理器是个与特定组件相关联的Java对象,它大多数是背景组 ... -
内部类
2011-06-24 10:27 589内部类 内部类对外部的类有一张特殊的通行证,能够自由存取它的内 ... -
PrintWriter
2011-06-22 21:53 1045PrintWriter可能比BufferedWriter更高级 ... -
网络与线程
2011-06-22 21:26 615常见的TCP端口号 FTP 20 T ... -
Java读文件(转)
2011-06-22 17:09 6931 File类 File 类封装了对用户机器的文件系统进行操 ... -
序列化和文件的输入输出
2011-06-22 10:47 728//序列化 FileOutputStream fileStr ... -
异常处理
2011-06-21 21:41 547编译器不会注意RuntimeException类型的异常。以为 ... -
HashMap中的泛型
2011-06-21 21:09 1292HashMap<String,Integer> h ... -
逐字符的读文件
2011-06-21 17:23 760BufferedReader reader = new Buf ... -
数字与静态
2011-06-20 21:26 555静态方法不能调用非静态的变量(方法内定义的变量当然可以用,这里 ... -
构造器与垃圾收集器
2011-06-20 17:16 575对象(包括实例变量)的生存空间:堆 方法调用及变量(局部变量) ... -
super和this
2011-06-20 16:50 591super和this的异同: 1)super(参数):调用基 ... -
接口与抽象类
2011-06-20 15:50 602方法中有一个是抽象的,该类就必须是抽象类 继承树结构下的第一 ... -
继承与多态
2011-06-20 14:55 729继承:extends java虚拟机 ... -
编程方法
2011-06-19 16:03 534先写测试码,再写程序。 因为: 1 思索与编写测试用的程序代码 ... -
对象的行为
2011-06-19 15:48 528Java是通过值传递的,也就是说通过拷贝传递 封装:将实例变 ... -
认识变量
2011-06-19 15:21 586变量有两种:primitive主数据类型和引用 Java pr ...
相关推荐
Java中的集合类与泛型机制(Java SE 1.5中加入了泛型机制)
Java基础知识学习教程-9集合与泛型 Java集合框架是Java语言中的一种数据结构,用于存储和操作数据。集合框架提供了多种类型的集合,包括Collection、Set、List、Queue、Map等。这些集合类型都继承自Collection接口...
Java集合与泛型是Java编程中非常核心的概念,它们为处理数据集合提供了一套丰富的接口和类库。在Java中,集合框架主要位于java.util包中,它提供了一套性能优化、设计精良的接口和类。泛型(Generics)是Java SE 5.0...
在C#编程语言中,集合和泛型是两个非常重要的概念,它们在开发高效、可维护的代码中扮演着核心角色。本篇文章将深入探讨这两个主题,并通过实例演示其应用场景。 首先,我们来理解什么是集合。在C#中,集合是一组...
综上所述,"集合与泛型委托映射WINFORM基础"的培训资料涵盖了.NET开发中的核心概念。学习这些内容对于初学者来说至关重要,因为它们构成了.NET开发的基础,并且对于理解更高级的框架和设计模式也非常重要。通过阅读5...
《第14章元素增删检索——集合与泛型》主要涵盖了Java编程中关于集合框架和泛型的重要概念,这是理解和高效使用Java集合类库的关键。以下是对这些知识点的详细阐述: 1. **集合框架与泛型**: - 集合框架是一套...
【OCJP认证-3期(PX017) 面向对象程序设计-集合与泛型】 在Java编程中,面向对象程序设计是核心概念,而集合与泛型则是实现高效、类型安全代码的关键工具。这篇文档可能是OCJP(Oracle Certified Professional, ...
5. **协变与逆变**: 在泛型中,类型参数的使用会影响类型安全。比如,List是List的子类型(协变),而List不是List的子类型(逆变)。 在实际开发中,理解和熟练运用Java集合框架和泛型能够大大提高代码的可维护性...
Java编程详细教程Java集合与泛型PPT教案学习.pptx
6. **Java集合与泛型**:集合框架是Java处理对象集合的主要工具,包括ArrayList、LinkedList、HashSet、HashMap等。泛型是Java 5引入的新特性,用于在编译时检查类型安全,避免强制类型转换,并提供更好的性能。理解...
在本次实验中,我们深入学习了Java集合框架中的两个主要部分:List接口和Map接口,以及它们的主要实现类,并探讨了泛型的概念。 首先,我们了解了集合的概念,它是一个可以存储多个对象的容器。集合框架的体系结构...
使用泛型()可以在编译时检查集合中插入的对象类型,避免了运行时的ClassCastException。例如,声明一个只包含String类型元素的List,可以写作List。 Collection接口中定义了一系列方法,包括: 1. 基本操作: - ...
在C#编程中,集合和泛型是两个非常重要的概念,尤其对于开发高效、类型安全的代码至关重要。本文将深入探讨这两个主题,并结合提供的示例程序进行解析。 首先,我们来了解一下**集合**。在C#中,集合是一组对象的...
尚硅谷_JavaSE_第12章_集合与泛型_扩展练习_附带参考答案.md
**集合框架与泛型**是Java编程语言中的核心特性,对于初学者来说,理解并熟练掌握这两个概念至关重要。Java集合框架是一组接口和类的集合,它们提供了在Java中存储和管理对象的方法。泛型则是Java SE 5.0引入的新...
泛型是Java SE 5.0引入的一个重要特性,它允许在集合定义时指定元素的类型,从而在编译时期就能检测类型错误,提高了代码的安全性和可读性。例如,可以创建一个只包含String对象的ArrayList:`ArrayList<String> ...
### C# 泛型集合与非泛型集合详解 #### 一、概述 在.NET Framework Class Library (FCL) 中,提供了丰富的集合类型,这些集合类型是编程中不可或缺的工具。根据是否支持泛型特性,这些集合大致可以分为两类:泛型...