《第12章泛型与集合框架》由会员分享,可在线阅读,更多相关《第12章泛型与集合框架(65页珍藏版)》请在金锄头文库上搜索。
1、第12章泛型与集合框架 12.1 泛型泛型 泛型(泛型(Generics)是在)是在JDK1.5中推出的,其主中推出的,其主要目的是可以建立具有要目的是可以建立具有类型安全类型安全的的集合框架集合框架,如,如链表、散列映射等数据结构链表、散列映射等数据结构 泛型的目的泛型的目的 Java泛型的主要目的是可以建立具有类型安全的泛型的主要目的是可以建立具有类型安全的数据结构,如链表、散列表等数据结构,最重要数据结构,如链表、散列表等数据结构,最重要的一个优点就是:的一个优点就是:在使用这些泛型类建立的数据在使用这些泛型类建立的数据结构时,不必进行强制类型转换结构时,不必进行强制类型转换,即不要求进
2、行,即不要求进行运行时类型检查。运行时类型检查。JDK1.5是支持泛型的编译器,它将运行时的类是支持泛型的编译器,它将运行时的类型检查提前到编译时执行,使代码更安全。型检查提前到编译时执行,使代码更安全。12.1.1 泛型类泛型类 可以使用可以使用“class 名称名称”声明一个类,声明一个类,为了和普通的类有所区别,这样声明的类称作泛为了和普通的类有所区别,这样声明的类称作泛型类,如:型类,如: class ShowObject E是其中的泛型,也就是并没有指定是其中的泛型,也就是并没有指定E是何种类是何种类型型泛型类的类体和和普通类的类体完全类似,由成泛型类的类体和和普通类的类体完全类似,
3、由成员变量和方法构成员变量和方法构成 举例举例public class ShowObjectpublic showMess(E b) String mess=b.toString(); System.out.println(mess); 12.1.2 泛型类声明对象泛型类声明对象 和普通的类相比,泛型类声明和创建对象时,类和普通的类相比,泛型类声明和创建对象时,类名后多了一对名后多了一对“”,而且必须要用具体的类型而且必须要用具体的类型替换替换“”中的泛型。中的泛型。 Dog.java public class Dog public String toString() return Cat.j
4、ava public class Cat public String toString() return 一只小花猫一只小花猫; public class Example12_1 public static void main(String args ) ShowObject showDog = new ShowObject(); showDog.showMess(new Dog(); ShowObject showCat = new ShowObject(); showCat.showMess(new Cat(); 说明说明泛型类中的泛型变量只能调用泛型类中的泛型变量只能调用Object类中
5、的方法,类中的方法,因此因此Cat和和Dog类都重写了类都重写了Object类的类的toString()方法。方法。12.1.3 泛型接口泛型接口 可以使用可以使用“interface 名称名称”声明一声明一个接口,这样声名的接口称作泛型接口如个接口,这样声名的接口称作泛型接口如 interface Listen void listen(E x);注:普通类实现泛型接口时,必须指定泛型接口注:普通类实现泛型接口时,必须指定泛型接口中泛型列表中的具体类型中泛型列表中的具体类型例例12-2interface Listen void listen(E x);class Student impleme
6、nts Listen public void listen(Piano p) p.play(); class Teacher implements Listen public void listen(Violin v) v.play(); class Piano public void play() System.out.println(钢琴协奏曲钢琴协奏曲:黄河黄河); class Violin public void play() System.out.println(小提琴协奏曲小提琴协奏曲:梁祝梁祝); public class Example12_2 public static vo
7、id main(String args ) Student zhang=new Student(); System.out.println(学生听学生听:); zhang.listen(new Piano(); Teacher teacher=new Teacher(); System.out.println(老师听老师听:); teacher.listen(new Violin(); Java集合框架集合框架 在在Java语言中,设计者对常用的语言中,设计者对常用的数据结构和算数据结构和算法法做了一些规范(接口)和实现(具体实现接口做了一些规范(接口)和实现(具体实现接口的类)。的类)。所有
8、抽象出来的数据结构和算法统称为所有抽象出来的数据结构和算法统称为Java集合集合框架框架Java程序员在具体应用时,不必考虑数据结构和程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来的一些算法实现细节,只需要用这些类创建出来的一些对象,然后直接应用就可以了,提高了编程效率对象,然后直接应用就可以了,提高了编程效率Java 容器类容器类容器类可以大大提高编程效率和编程能力容器类可以大大提高编程效率和编程能力 Java2容器类类库的用途是“保存对象保存对象”,它分为两类: Collection-一组独立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而
9、Set不能有重复元素。 Map-一组成对的“键值对”对象,即其元素是成对的对象集合框架的层次结构集合框架的层次结构说明说明Collection是是集合接口集合接口,集合框架的根集合框架的根, ,代表一代表一组组ObjectObjectSetSet子接口:里面的元素不允许重复子接口:里面的元素不允许重复ListList子接口:里面的元素可以重复子接口:里面的元素可以重复说明说明Set和和List对比:对比:Set:检索元素效率低下,删除和插入效率高。:检索元素效率低下,删除和插入效率高。 插入和删除不会引起元素位置改变插入和删除不会引起元素位置改变List:和数组类似,:和数组类似,List可以
10、动态增长,查找元可以动态增长,查找元素效率高。素效率高。说明说明Set的子类的子类: HashSet 以哈希表的形式存放元素,插入删除速度很快以哈希表的形式存放元素,插入删除速度很快TreeSet保持次序的保持次序的Set,底层为树结构。使用它可以从,底层为树结构。使用它可以从Set中提取有序的序列。中提取有序的序列。 List的子类的子类: ArrayList:动态数组(顺序结构):动态数组(顺序结构) LinkedList:链表(链式结构):链表(链式结构)12.2 链表链表 链表是由若干个称作节点的对象组成的一种数据链表是由若干个称作节点的对象组成的一种数据结构,每个节点含有一个数据和下
11、一个节点的引结构,每个节点含有一个数据和下一个节点的引用,或含有一个数据并含有上一个节点的引用和用,或含有一个数据并含有上一个节点的引用和下一个节点的引用下一个节点的引用 数据数据引用引用引用引用数据数据null引用引用数据数据引用引用引用引用数据数据引用引用 null图图12.3 双链表示意图双链表示意图12.2.1 LinkedList泛型类泛型类 java.util包中的包中的LinkedList泛型类创建的对泛型类创建的对象以链表结构存储数据,习惯上称象以链表结构存储数据,习惯上称LinkedList类类创建的对象为创建的对象为链表对象链表对象。例如,。例如,LinkedList li
12、st = new LinkedList();创建一个空双链表。创建一个空双链表。使用使用LinkedList泛型类声明创建链表时,必泛型类声明创建链表时,必须要指定须要指定E的具体类型的具体类型,然后链表就可以使用,然后链表就可以使用add(E obj)方法向链表依次增加节点方法向链表依次增加节点 举例举例list.add(“你好你好”);list.add(“十一快乐十一快乐”);list.add(“注意休息注意休息”);此时,此时,链表里有链表里有3个节点个节点,节点自动链接在一起,节点自动链接在一起12.2.2 常用方法常用方法 以下是以下是LinkedList泛型类实现泛型类实现Lis泛
13、型接口中泛型接口中的一些常用方法。的一些常用方法。 public boolean add(E element) public void add(int index ,E element) public void clear() public E remove(int index) public boolean remove(E element) public E get(int index) public int indexOf(E element) public int lastIndexOf(E element) public E set(int index ,E element) pub
14、lic int size() public boolean contains(Object element) 以下是以下是LinkedList泛型类本身新增加的一些泛型类本身新增加的一些常用方法常用方法 public void addFirst(E element) public void addLast(E element) public E getFirst() public E getLast() public E removeFirst() public E removeLast() public Object clone() 12.2.3 遍历链表遍历链表 当用户需要遍历集合中的对象
15、时,应当使用该集当用户需要遍历集合中的对象时,应当使用该集合提供的合提供的迭代器迭代器,而不是让集合本身来遍历其中,而不是让集合本身来遍历其中的对象。由于迭代器遍历集合的方法在找到集合的对象。由于迭代器遍历集合的方法在找到集合中的一个对象的同时,也得到待遍历的后继对象中的一个对象的同时,也得到待遍历的后继对象的引用,因此的引用,因此迭代器可以快速地遍历集合迭代器可以快速地遍历集合。什么是迭代器什么是迭代器迭代器是一个实现了迭代器是一个实现了Iterator接口的类的对象接口的类的对象所有实现了所有实现了Collection接口的类都有一个名称为接口的类都有一个名称为iterator()的方法来
16、获取迭代器()的方法来获取迭代器链表对象可以使用链表对象可以使用iterator()方法获取一个方法获取一个Iterator对象,该对象就是针对当前链表的迭代对象,该对象就是针对当前链表的迭代器器 next方法方法:返回迭代器中的一个元素:返回迭代器中的一个元素hasNext方法方法:如果容器里还有元素,则为:如果容器里还有元素,则为true例例12-3import java.util.*;public class Example12_3 public static void main(String args ) List list=new LinkedList(); list.add(大家好
17、大家好); list.add(国庆国庆60周年周年); list.add(十一快乐十一快乐); Iterator iter=list.iterator(); while(iter.hasNext() String te=iter.next(); System.out.print(te+ ); System.out.println(); long endTime=System.currentTimeMillis(); for(int i=0;ilist.size();i+) String te=list.get(i); System.out.print(te+ ); JDK1.5之前之前没有泛型
18、的没有泛型的LinkedList类类,可以用,可以用普通的普通的LinkedList创建一个链表对象,如创建一个链表对象,如LinkedList mylist=new LinkedList();然后然后mylist链表可以使用链表可以使用add(Object obj)方法向方法向这个链表依次添加节点。由于任何类都是这个链表依次添加节点。由于任何类都是Object类的子类,类的子类,因此可以把任何一个对象作为链表节因此可以把任何一个对象作为链表节点中的对象点中的对象 使用集合框架注意事项(没有使用泛型)使用集合框架注意事项(没有使用泛型)ObjectObjectObject加入集合加入集合从集合
19、中取出从集合中取出(Rabbit) object(Car) object(Student) objectRabbitCarStudentRabbitCarStudent任何对象加入集合类后,自动转变为任何对象加入集合类后,自动转变为ObjectObject类型;取出类型;取出时,需要进行强制类型转换,恢复为特定的类型时,需要进行强制类型转换,恢复为特定的类型 例例12-4使用了使用了JDK1.5版本之前的版本之前的LinkedList12.2.4 排序与查找排序与查找 如果链表中的数据是实现了如果链表中的数据是实现了Comparable接口接口的的类的实例,比如类的实例,比如String对象,
20、那么对象,那么Java.util包中包中的的Collections类类调用调用sort(List list)方法可方法可以对参数指定的列表进行排序,即按节点中的存以对参数指定的列表进行排序,即按节点中的存储的对象的大小储的对象的大小升序升序排列节点。排列节点。 Collections类类注意区分和注意区分和Collection接口的的区别接口的的区别Collections是一个类,该类里的是一个类,该类里的 方法都是静态方法都是静态的方法,主要是用来对集合的操作的。的方法,主要是用来对集合的操作的。是个非常有用的是个非常有用的类类String类实现了泛型接口类实现了泛型接口Comparable
21、中的中的compareTo(E b)方法,使得字符串可以按字典方法,使得字符串可以按字典序比较大小,如果一个链表序比较大小,如果一个链表list如下添加节点:如下添加节点:list.add(bird);list.add(apple);list.add(cat);那么用那么用sort方法排序方法排序list:Collection.sort(list);之后,之后,list中三个节点中的数据将依次是中三个节点中的数据将依次是apple,bird和和cat。如何比较两个对象如何比较两个对象一个类可以实现泛型接口一个类可以实现泛型接口Comparable中的中的comareTo(E b)方法来指定该类
22、实例互相比较大小关方法来指定该类实例互相比较大小关系的准则,实现系的准则,实现Comparable接口类创建的对象接口类创建的对象可以调用可以调用compareTo(E b)方法和参数指定的对象比方法和参数指定的对象比较大小关系。假如较大小关系。假如a和和b是实现是实现Comparable接口接口类创建的两个对象,当类创建的两个对象,当pareTo(b)0时,称时,称a大于大于b,pareTo(b)=0,时,称时,称a等于等于b。如何查找一个对象如何查找一个对象当链表节点中的对象是实现泛型接口当链表节点中的对象是实现泛型接口Comparable的类的实例时,的类的实例时,就可以使用就可以使用s
23、ort方法对链表进行排序操作。方法对链表进行排序操作。有时需要查找链表中是否含有和指定数据相等的有时需要查找链表中是否含有和指定数据相等的数据,那么首先要对链表排序,然后使用数据,那么首先要对链表排序,然后使用Collections类里的类里的public static int binarySearch(List list, T key)查找链表中是否含有和数据查找链表中是否含有和数据key相等的数据相等的数据 12-512.2.5 洗牌与旋转洗牌与旋转 Collections类还提供了将链表中的数据重新随类还提供了将链表中的数据重新随机排列的类方法以及旋转链表中数据的类方法,机排列的类方法以
24、及旋转链表中数据的类方法,方法的详细解释如下方法的详细解释如下 public static void shuffle(List list):随机:随机排列排列list中的节点。中的节点。static void rotate(List list, int distance):旋转:旋转链表中的节点,调用该方法后,链表中的节点,调用该方法后,list索引为索引为i的节点中的节点中的数据将是调用该方法前索引为的数据将是调用该方法前索引为(i-distance) mod list.size()的节点中的数据。的节点中的数据。例如,假设例如,假设list节点数据依次为:节点数据依次为:a b c d e
25、,那么执,那么执行行Collections.rotate(list,1)之后,之后,list节点数据依次节点数据依次为为e a b c d。当方法的参数。当方法的参数distance取正值时,向右取正值时,向右转动转动list中的数据,取负值时向左转动中的数据,取负值时向左转动list中的数据。中的数据。图图12.6 洗牌与旋转洗牌与旋转public static void reverse(List list):翻转:翻转list中中的数据。假设的数据。假设list节点中的数据依次为:节点中的数据依次为:a b c d e,那么在那么在Collections.reverse(list)之后,之
26、后,list节点中的节点中的数据依次为数据依次为e d c b a。 12-6,12-712-7:若干个人围成一圈,从某个人开始顺时针:若干个人围成一圈,从某个人开始顺时针数到第数到第3个人,该人丛圈中退出,然后继续顺时个人,该人丛圈中退出,然后继续顺时针数到第针数到第3个人,该人从圈中退出,依次类推,个人,该人从圈中退出,依次类推,程序输出圈中最后剩下的人程序输出圈中最后剩下的人12.3 堆栈堆栈 堆栈是一种堆栈是一种“后进先出后进先出”的数据结构的数据结构使用使用java.util包中的包中的Stack泛型类创建一个堆泛型类创建一个堆栈对象,堆栈对象可以使用栈对象,堆栈对象可以使用publ
27、ic E push(E item);实现压栈操作。使用实现压栈操作。使用public E pop();实现出栈操作。实现出栈操作。 使用使用public boolean empty();判断堆栈是否还有数据,有数据返回判断堆栈是否还有数据,有数据返回false ,否,否则返回则返回true。使用。使用public E peek();获取堆栈顶端的数据,但不删除该数据。使用获取堆栈顶端的数据,但不删除该数据。使用public int search(Object data);获取数据在堆栈中的位置,最顶端的位置是,获取数据在堆栈中的位置,最顶端的位置是,向下依次增加,如果堆栈不含此数据,则返回向下
28、依次增加,如果堆栈不含此数据,则返回-1。12-8Fibonacci数列,用栈实现数列,用栈实现12.4 散列映射散列映射:HashMap 关于关于Map:实现实现Map接口的对象会将键(接口的对象会将键(Key)映射至值映射至值(Value)值指的是要存入容器的对象。值指的是要存入容器的对象。在将对象存入在将对象存入Map对象时,需要同时给定一个键,对象时,需要同时给定一个键,要取回对象时可以指定,这样就可以取得与键对要取回对象时可以指定,这样就可以取得与键对应的对象值。应的对象值。Map中每一个键都是唯一的,不能有重复的键。中每一个键都是唯一的,不能有重复的键。Map拥有自己的排序机制拥有
29、自己的排序机制Map继承关系继承关系MapSortedMapHashtableLinkedHashMapHashMapTreeMap12.4.1 HashMap泛型类泛型类HashMap泛型类实现了泛型接口泛型类实现了泛型接口Map,HashMap类中的绝大部分方类中的绝大部分方法都是法都是Map接口方法的实现。接口方法的实现。编程时,可以使用接口回调技术,即把编程时,可以使用接口回调技术,即把HashMap对象的引用赋值给对象的引用赋值给Map接接口变量,那么接口变量就可以调用类实现的接口口变量,那么接口变量就可以调用类实现的接口方法方法HashMap对象采用对象采用散列表散列表这种数据结构
30、这种数据结构存储数据,习惯上称存储数据,习惯上称HashMap对象为散对象为散列映射或哈希映射列映射或哈希映射。散列映射用于存储。散列映射用于存储“键键/值值”对对,允许把任何数量的,允许把任何数量的“键键/值值”对存储在一对存储在一起。键不可以发生逻辑冲突,起。键不可以发生逻辑冲突,即不要两个数据项即不要两个数据项使用相同的键使用相同的键,如果出现两个数据项对应相同的如果出现两个数据项对应相同的键,那么,先前散列映射中的键,那么,先前散列映射中的“键键/值值”对将被对将被替换替换 HashMap中常用方法中常用方法public V put(K key,V value)该方法将键值对对象存放到
31、映射中该方法将键值对对象存放到映射中public V get(Object key) 返回散列映射中使返回散列映射中使用用key做键的做键的“键键/值值”对中的值对中的值import java.util.*;public class HashMapDemopublic static void main(String args)Map map1=new HashMap();String key1=book;String key2=apple;map1.put(key1,书书);map1.put(key2,苹果苹果);System.out.println(map1.get(key1);System
32、.out.println(map1.get(key2);HashMap中常用方法中常用方法 public void clear() 清空散列映射。清空散列映射。public Object clone() 返回当前散列映射的一个克隆。返回当前散列映射的一个克隆。public boolean containsKey(Object key) 如果散列映射有如果散列映射有“键键/值值”对使用了参数指定的键,方法返回对使用了参数指定的键,方法返回true,否则返回,否则返回false。public boolean containsValue(Object value) 如果散列映射如果散列映射有有“键键
33、/值值”对的值是参数指定的值,方法返回对的值是参数指定的值,方法返回true,否则返,否则返回回false。public boolean isEmpty() 如果散列映射不含任何如果散列映射不含任何“键键/值值”对,方法返回对,方法返回true,否则返回,否则返回false。public V remove(Object key) 删除散列映射中键为参数指定删除散列映射中键为参数指定的的“键键/值值”对,并返回键对应的值。对,并返回键对应的值。public int size() 返回散列映射的大小,即散列映射中返回散列映射的大小,即散列映射中“键键/值值”对的数目。对的数目。12.4.3 遍历散
34、列映射遍历散列映射 HashMap类里:类里:public Collection values()方法方法返回一个实现返回一个实现Collection接口类创建接口类创建的对象的对象,其中包括所有值对象。其中包括所有值对象。可以使用接口回调技术,即将该对象的引用赋给可以使用接口回调技术,即将该对象的引用赋给Collection接口变量,该接口变量可以回调接口变量,该接口变量可以回调iterator()方法获取一个方法获取一个Iterator对象,这个对象,这个Iterator对象对象存放着散列映射中所有存放着散列映射中所有“键键/值值”对中的对中的“值值” import java.util.*
35、;public class HashMapDemopublic static void main(String args)Map map1=new HashMap();map1.put(book,书书);map1.put(apple,苹果苹果);map1.put(Language,语言语言);Collection c1=map1.values();Iterator it1=c1.iterator();while(it1.hasNext() System.out.println(it1.next();System.out.println();for(String s:map1.values()
36、System.out.println(s); 思考思考(1)输出的次序并不是按当初加入的次序输出)输出的次序并不是按当初加入的次序输出的的(2)如果想要在迭代所有的对象时,依照插入)如果想要在迭代所有的对象时,依照插入的顺序来排列,则可以使用的顺序来排列,则可以使用LinkedHashMap,它是它是HashMap的子类。的子类。(3)只要是实现只要是实现Collection接口的对象,都可接口的对象,都可以使用增强的以使用增强的for循环功能来迭代所有的值循环功能来迭代所有的值12.4.3 基于散列映射的查询基于散列映射的查询 对于经常需要进行查找的数据可以对于经常需要进行查找的数据可以采用
37、散列映射采用散列映射来存储这样的数据,即为数据指定一个查找它的来存储这样的数据,即为数据指定一个查找它的关键字关键字,然后按着,然后按着“健健-值值”对,对,将关键字和数将关键字和数据一并存入散列映射中据一并存入散列映射中 例例12-9英语单词查询的应用程序英语单词查询的应用程序12.5 树集树集 12.5.1 TreeSet泛型类泛型类 TreeSet类是实现类是实现Set接口和接口和SortedSet接口接口的类的类SortedSet提供的方法让你有序得取出对应位置提供的方法让你有序得取出对应位置的对象。的对象。TreeSet类创建的对象称作树集类创建的对象称作树集。树集树集树集采用树结构
38、存储数据,树节点中的数据会按树集采用树结构存储数据,树节点中的数据会按存放的数据的存放的数据的“大小大小”顺序一层一层地依次排列,顺序一层一层地依次排列,在同一层中的节点从左到右按字从小大递增排列,在同一层中的节点从左到右按字从小大递增排列,下一层的都比上一层的小下一层的都比上一层的小 应用应用import java.util.*;public class TreeSetDemo1public static void main(String args)Set set1=new TreeSet();set1.add(book);set1.add(boy);set1.add(apple);set1
39、.add(zoo);for(String name:set1) System.out.println(name); 说明说明由于加入的由于加入的String对象,执行结果会自动按照字对象,执行结果会自动按照字典顺序进行排列。典顺序进行排列。依照字典顺序来排列依照字典顺序来排列String对象是对象是TreeSet默认默认的的12.5.2 节点的大小关系节点的大小关系 当一个树集中的数据是实现当一个树集中的数据是实现Comparable泛型泛型接口类创建的对象时,节点就按对象的大小关系接口类创建的对象时,节点就按对象的大小关系顺序排列顺序排列12.5.3 TreeSet类的常用方法类的常用方法
40、public boolean add(E o) 向树集添加加节点,节点中的数据向树集添加加节点,节点中的数据由参数指定,添加成功返回由参数指定,添加成功返回true,否则返回,否则返回false。public void clear() 删除树集中的所有节点。删除树集中的所有节点。public void contains(Object o) 如果树集中有包含参数指定如果树集中有包含参数指定的对象,该方法返回的对象,该方法返回true,否则返回,否则返回false 。public E first() 返回树集中的第一个节点中的数据(最小的节返回树集中的第一个节点中的数据(最小的节点)。点)。pub
41、lic E last() 返回最后一个节点中的数据(最大的节点)。返回最后一个节点中的数据(最大的节点)。public isEmpty() 判断是否是空树集,如果树集不含任何节点,判断是否是空树集,如果树集不含任何节点,该方法返回该方法返回true 。public boolean remove(Object o) 删除树集中的存储参数指删除树集中的存储参数指定的对象的最小节点,如果删除成功,该方法返回定的对象的最小节点,如果删除成功,该方法返回true,否则,否则返回返回false。public int size() 返回树集中节点的数目返回树集中节点的数目 例例12-10树集按照身高从矮到高
42、存放三个学生。树集按照身高从矮到高存放三个学生。说明:说明:把一个元素插入到树集的合适位置要比插入到数把一个元素插入到树集的合适位置要比插入到数组或链表中的合适位置要高!组或链表中的合适位置要高!12.6 树映射树映射 TreeMap类实现了类实现了Map接口,称接口,称TreeMap对象为树映射。树映射使用对象为树映射。树映射使用public V put(K key,V value);方法添加节点,该节点不仅存储着数据方法添加节点,该节点不仅存储着数据value,而且也存储着和其关联的关键字而且也存储着和其关联的关键字key,也就是说,也就是说,树映射的节点存储树映射的节点存储“关键字关键字
43、/值值”对对。和树集不。和树集不同的是,同的是,树映射保证节点是按照节点中的关键字树映射保证节点是按照节点中的关键字升序排列。升序排列。 举例举例import java .util.*;public class TreeMapDemopublic static void main(String args)Map map1=new TreeMap();map1.put(book,书书);map1.put(apple,苹果苹果);map1.put(dest,桌子桌子);for(String s:map1.values() System.out.println(s);例例12-11如果对对象有自己的
44、一套排列顺序,要定义一个如果对对象有自己的一套排列顺序,要定义一个实现实现Comparable接口的对象。接口的对象。12.7 自动装箱与拆箱自动装箱与拆箱 JDK1.5新增了自动装箱与拆箱功能新增了自动装箱与拆箱功能(Autoboxing and Auto-Unboxing of Primitive Types)。在没有自动装箱与拆箱功)。在没有自动装箱与拆箱功能之前,不能将基本数据类型数据添加到类似链能之前,不能将基本数据类型数据添加到类似链表的数据结构中。表的数据结构中。JDK1.5后,程序允许把一个后,程序允许把一个基本数据类型添加到类似链表等数据结构中,系基本数据类型添加到类似链表等
45、数据结构中,系统会自动完成基本类型到相应对象转换(自动装统会自动完成基本类型到相应对象转换(自动装箱)。当从一个数据结构中获取的对象时,如果箱)。当从一个数据结构中获取的对象时,如果该对象是基本数据的封装对象,那么系统自动完该对象是基本数据的封装对象,那么系统自动完成对象到基本类型的转换(自动拆箱)成对象到基本类型的转换(自动拆箱) 总结总结(1)List数据结构特性:数据结构特性:每个加入每个加入List中的元素是顺序加入的,并可指定中的元素是顺序加入的,并可指定索引来存取元素索引来存取元素(2)List中允许元素重复中允许元素重复(3)实现)实现List的类的类ArrayList,LinkedList对于顺序加入与存取,使用对于顺序加入与存取,使用ArrayList的效率高的效率高对于经常变动元素排列顺序的需求,使用对于经常变动元素排列顺序的需求,使用LinkedList会更好会更好总结总结(4)Set容器中的对象都是唯一的,不允许重复容器中的对象都是唯一的,不允许重复(5)实现)实现Map接口的对象将会将键映射至值接口的对象将会将键映射至值