泛型与集合框架
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
什么是链表?
以链式结构存储的线性表称之为线性链
表。
特点是该线性表中的数据元素可以用任 意的存储单元来存储。线性表中逻辑相邻的 两元素的存储空间可以是不连续的。为表示 逻辑上的顺序关系,对表的每个数据元素除 存储本身的信息之外,还需存储一个指示其 直接衔接的信息。这两部分信息组成数据元 素的存储映象,称为结点。
例7-7:
mylist.add(stu3); int number=mylist.size(); System.out.println("现在链表中有 "+number+"个节点:"); for(int i=0;i<number;i++){ Student temp=mylist.get(i); System.out.printf("第"+i+"节点中的数 据,学生:%s,分 数:%d\n",temp.name,temp.score); }
1 2 3 4 5 6
LinkedList<E>泛型类 HashSet<E>泛型类 HashMap<K,V>泛型类 TreeSet<E>泛型类 TreeMap<K,V>泛型类 Stack<E>泛型类
什么是集合框架
集合框架:是为表示和操作集合而 规定的一种统一标准的体系结构。 集合中只能容纳对象。 对象会自动扩展,以容纳添加到其 中的所有对象。 Java 2的集合类型被统一组织在 Java集合框架(Java Collections Framework)当中。
7.4 LinkedList<E>泛型类
mylist.add(“Java”);
这时,双链表mylist就有了4个 节点,节点是自动连接在一起的, 不需要我们再去做连接。也就是说, 不需要我们去操作安排节点中所存 放的下一个或上一个节点的引用。
7.4 LinkedList<E>泛型类
2、常用方法 以下是LinkedList<E>泛型类的 一些常用方法: public boolean add(E element)——向链表的末尾添加一 个新的节点,该节点中的数据是参 数element指定的对象。
例7-7:
if(mylist.contains(stu1)){ System.out.println("链表包含"+stu1+":"); System.out.println(stu1.name+","+stu1.score ); } else{ System.out.println("链表没有节点含有 "+stu1); } } }
List接口
•List是Collection的子接口,里面的所有内容 都是允许重复。 •它在Collection接口的基础上做了不少的扩 展。比较典型的方法有:add(),get(), remove(),listIterator()。
什么是迭代器模式
•迭代器模式:提供一种方法,它能够用来遍 历(访问)集合的部分或全部元素,而又不 暴露其内部的表示。 •Java的集合框架已经实现好了迭代器模式, 只需要使用即可。
7.4 LinkedList<E>泛型类
1、LinkedList<E>对象 java.util包中的LinkedList<E>泛 型类创建的对象以链表结构存储数据, 习惯上称LinkedList<E>类创建的对象为 链表对象。例如, LinkedList<String> mylist=new LinkedList<String>();
例7-6:
Leabharlann Baidu
public class Example7_7{ public static void main(String args[]){ LinkedList<Student> mylist=new LinkedList<Student>(); Student stu1=new Student("张小一",78), stu2=new Student("王小二",98), stu3=new Student("李大山",67); mylist.add(stu1); mylist.add(stu2);
例7-7:
Student removeSTU=mylist.remove(1); System.out.printf("被删除的节点中的数据 是:%s,%d\n",removeSTU.name,removeSTU. score); Student replaceSTU=mylist.set(1,new Student("赵钩林",68)); System.out.printf("被替换的节点中的数据 是:%s,%d\n",replaceSTU.name,replaceSTU. score); number=mylist.size();
什么是集合框架
Collection Map
List
Set
SortedSet
AbstractCollection
SortedMap
AbstractList
AbstractSet
AbstractMap
AbstractSequentialList ArrayList LinkedList HashSet TreeSet HashMap TreeMap
7.4 LinkedList<E>泛型类
使用LinkedList<E>泛型类可以创建 链表结构的数据对象。链表是由若干个 节点组成的一个种数据结构,每个节点 含有一个数据和下一个节点的引用(单 链表),或含有一个数据以及上一个节 点的引用和下一个节点的引用(双链 表),节点的索引从0开始。链表适合动 态改变它存储的数据,如增加、删除节 点等。
什么是集合框架
•Java的集合框架提供了一套设计优良的接口 和类,使程序员操作成批的数据或对象元素 极为方便,极大的减化了程序员编程时的负 担。 •Java的集合框架的核心接口为:Collection、 Map、Iterator,这三个接口是以后要使用的 最重要,最多的接口。 •Java 2的集合类型被统一组织在Java集合框 架(Java Collections Framework )当中。
7.4 LinkedList<E>泛型类
public
void addLast(E element)——向链表的末尾添加一
个新的节点,该节点中的数据是参 数element指定的对象。 public void clear()——删除链 表中的所有节点,使当前链表成为 空链表。
7.4 LinkedList<E>泛型类
什么是集合框架
•按具体集合类使用上的特性来分的话,主要 有三类:List、Set和Map。 •List是有序的,但允许重复。 •Set是无序的,但不允许重复。 •Map主要表现的是键值对的概念。
集合与数组的区别
•数组是定长,即创建后固定不变;集合是不 定长的,其长度可以动态增长或减少。 •数组是同构的,即数组中的元素是相同的类 型;集合可以是异构的,当然也可以通过泛 型创建类型安全的同构集合。 •数组中可以存放基本数据类型或对象;集合 只存放对象。
7.4 LinkedList<E>泛型类
public
E removeLast()——删除链 表中最后一个节点,并返回这个节 点中的对象。 public E get(int index)——得到 链表中指定位置处节点中的对象。 public E getFirst()——得到链表 中第一个节点的对象。
网 络 程 序 设 计
JAVA网络程序设计 Ssandy· Yao
泛型与集合框架
P136 P137 P140 P141 P143
例7-7 例7-8 例7-10 例7-11 例7-12
泛型与集合框架
P145 P146 P148 P149
例7-13 例7-14 例7-15 作业题3-4
泛型与集合框架
7.4 LinkedList<E>泛型类
public
E getLast()——得到链表中最后一 个节点的对象。 public int indexOf(E element)——返回 含有数据element的节点在链表中首次出现的 位置,如果链表中无此节点则返回-1。 public int lastindexOf(E element)——返 回含有数据element的节点在链表中最后出现 的位置,如果链表中无此节点则返回-1。
7.4 LinkedList<E>泛型类
3、遍历链表 在例7-7中借助get()方法实现了遍历链 表。我们可以借助泛型类Iterator<E>实 现遍历链表,一个链表对象可以使用 iterator()方法返回一个Iterator<E>类型 的对象,该对象中每个数据成员刚好是 链表节点中的数据,而且这些数据成员 是按顺序存放在Iterator对象中的。
public
boolean contains(Object element)——判断链表节点中是否 有节点含有对象element。 public Object clone()——得到当 前链表的一个克隆链表,该克隆链 表中的节点数据的改变不会影响到 当前链表中节点的数据,反之亦然。
例7-7:
import java.util.*; class Student { String name; int score; Student(String name,int score){ this.name=name; this.score=score; } }
7.4 LinkedList<E>泛型类
public
void add(int index,E element)——向链表的指定位置添 加一个新的节点,该节点中的数据 是参数element指定的对象。 public void addFirst(E element)——向链表的头添加一个 新的节点,该节点中的数据是参数 element指定的对象。
7.4 LinkedList<E>泛型类
public
E set(int index,E element)——将当前链表index位
置节点中的对象替换为参数element 指定的对象,并返回被替换的对象。 public int size()——返回链表的 长度,即节点的个数。
7.4 LinkedList<E>泛型类
例7-7:
System.out.println("现在链表中有 "+number+"个节点:"); for(int i=0;i<number;i++){ Student temp=mylist.get(i); System.out.printf("第"+i+"节点中的数据,学 生:%s,分数:%d\n",temp.name,temp.score); }
7.4 LinkedList<E>泛型类
Collection接口
•Collection接口是在整个Java集合中List和 Set的父接口,此接口定义如下: public interface Collection<E> extends Iterable<E> •此接口使用了泛型。
Collection接口
常用方法: •add(E e)/remove(Object o) 添加或移除元素。 •clear() 清空集合中的所有元素。 •contains(Object o) 如果此集合包含指定的元素,则返回true。 •iterator() 返回在此集合内的元素的迭代器。 •size() 获取集合 中的元素个数。 •toArray()/toArray(T[] a) 返回包含些集合中的所有元素的数组。
7.4 LinkedList<E>泛型类
创建一个空双链表。然后mylist可 以使用add(String obj)方法向链表 依次增加节点,节点中的数据是参 数obj指定对象的引用,如: mylist.add(“How”); mylist.add(“Are”); mylist.add(“You”);
public
E remove(int index)—— 删除链表中指定位置上的节点。 public boolean remove(E element)——删除首次出现含有数 据element的节点。 public E removeFirst()——删除 链表中第一个节点,并返回这个节 点中的对象。