`

集合与泛型

 
阅读更多
ArrayList

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)
{
   ...
}
分享到:
评论

相关推荐

    集合与泛型 ppt

    Java中的集合类与泛型机制(Java SE 1.5中加入了泛型机制)

    java基础知识学习教程-9集合与泛型.pptx

    Java基础知识学习教程-9集合与泛型 Java集合框架是Java语言中的一种数据结构,用于存储和操作数据。集合框架提供了多种类型的集合,包括Collection、Set、List、Queue、Map等。这些集合类型都继承自Collection接口...

    java集合与泛型.pdf

    Java集合与泛型是Java编程中非常核心的概念,它们为处理数据集合提供了一套丰富的接口和类库。在Java中,集合框架主要位于java.util包中,它提供了一套性能优化、设计精良的接口和类。泛型(Generics)是Java SE 5.0...

    C#中的集合与泛型应用实例

    在C#编程语言中,集合和泛型是两个非常重要的概念,它们在开发高效、可维护的代码中扮演着核心角色。本篇文章将深入探讨这两个主题,并通过实例演示其应用场景。 首先,我们来理解什么是集合。在C#中,集合是一组...

    集合与泛型委托映射WINFORM基础.rar

    综上所述,"集合与泛型委托映射WINFORM基础"的培训资料涵盖了.NET开发中的核心概念。学习这些内容对于初学者来说至关重要,因为它们构成了.NET开发的基础,并且对于理解更高级的框架和设计模式也非常重要。通过阅读5...

    第14章元素增删检索——集合与泛型.ppt

    《第14章元素增删检索——集合与泛型》主要涵盖了Java编程中关于集合框架和泛型的重要概念,这是理解和高效使用Java集合类库的关键。以下是对这些知识点的详细阐述: 1. **集合框架与泛型**: - 集合框架是一套...

    OCJP认证-3期(PX017) 面向对象程序设计-集合与泛型.doc

    【OCJP认证-3期(PX017) 面向对象程序设计-集合与泛型】 在Java编程中,面向对象程序设计是核心概念,而集合与泛型则是实现高效、类型安全代码的关键工具。这篇文档可能是OCJP(Oracle Certified Professional, ...

    Java集合框架及泛型

    5. **协变与逆变**: 在泛型中,类型参数的使用会影响类型安全。比如,List是List的子类型(协变),而List不是List的子类型(逆变)。 在实际开发中,理解和熟练运用Java集合框架和泛型能够大大提高代码的可维护性...

    Java编程详细教程Java集合与泛型PPT教案学习.pptx

    Java编程详细教程Java集合与泛型PPT教案学习.pptx

    Java课件 (包括基础语法,数组与语句,面向对象编程,java异常处理,java常用基础类,java集合与泛型

    6. **Java集合与泛型**:集合框架是Java处理对象集合的主要工具,包括ArrayList、LinkedList、HashSet、HashMap等。泛型是Java 5引入的新特性,用于在编译时检查类型安全,避免强制类型转换,并提供更好的性能。理解...

    实验七:Java集合与泛型

    在本次实验中,我们深入学习了Java集合框架中的两个主要部分:List接口和Map接口,以及它们的主要实现类,并探讨了泛型的概念。 首先,我们了解了集合的概念,它是一个可以存储多个对象的容器。集合框架的体系结构...

    java集合与泛型[参照].pdf

    使用泛型()可以在编译时检查集合中插入的对象类型,避免了运行时的ClassCastException。例如,声明一个只包含String类型元素的List,可以写作List。 Collection接口中定义了一系列方法,包括: 1. 基本操作: - ...

    基于C#控制台的集合与泛型示例程序

    在C#编程中,集合和泛型是两个非常重要的概念,尤其对于开发高效、类型安全的代码至关重要。本文将深入探讨这两个主题,并结合提供的示例程序进行解析。 首先,我们来了解一下**集合**。在C#中,集合是一组对象的...

    尚硅谷_JavaSE_第12章_集合与泛型_扩展练习_附带参考答案.md

    尚硅谷_JavaSE_第12章_集合与泛型_扩展练习_附带参考答案.md

    集合框架与泛型课件

    **集合框架与泛型**是Java编程语言中的核心特性,对于初学者来说,理解并熟练掌握这两个概念至关重要。Java集合框架是一组接口和类的集合,它们提供了在Java中存储和管理对象的方法。泛型则是Java SE 5.0引入的新...

    JAVA集合与泛型PPT教案学习.pptx

    泛型是Java SE 5.0引入的一个重要特性,它允许在集合定义时指定元素的类型,从而在编译时期就能检测类型错误,提高了代码的安全性和可读性。例如,可以创建一个只包含String对象的ArrayList:`ArrayList&lt;String&gt; ...

    C#泛型集合与非泛型集合

    ### C# 泛型集合与非泛型集合详解 #### 一、概述 在.NET Framework Class Library (FCL) 中,提供了丰富的集合类型,这些集合类型是编程中不可或缺的工具。根据是否支持泛型特性,这些集合大致可以分为两类:泛型...

Global site tag (gtag.js) - Google Analytics