Java常见数据结构实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常见数据结构的Java实现 实现 常见数据结构的
我们在编写程序时经常要和各种数据打交道, 我们在编写程序时经常要和各种数据打交道,为处理这些 数据所选的数据结构对于我们的程序的运行效率是非常重要的. 数据所选的数据结构对于我们的程序的运行效率是非常重要的. 这章讲述几种常见的数据结构的Java 实现. 这章讲述几种常见的数据结构的Java 实现. 在学习数据结构这门课程的时候, 在学习数据结构这门课程的时候,人们要用具体的算法去实 现相应的数据结构,例如,为了实现链表这种数据结构, 现相应的数据结构,例如,为了实现链表这种数据结构,需要实 现往链表中插入节点或从链表中删除节点的算法, 现往链表中插入节点或从链表中删除节点的算法,感觉有些烦 琐. 之后,Java 提供了实现常见数据结构的类, 在jdk1.2 之后,Java 提供了实现常见数据结构的类,创建 链表等数据结构和创建数组一样简单, 链表等数据结构和创建数组一样简单,不再需要你去写具体的 算法.我们主要讲述这些类的用法, 算法.我们主要讲述这些类的用法,但对这些数据结构的原理的 掌握对于我们熟练地用好这些类还是很有帮助的. 掌握对于我们熟练地用好这些类还是很有帮助的.
Vector类的常用方法 类的常用方法
public public public public public public public public boolean add(Object o) 将对象o添加到向量的末尾. 将对象o添加到向量的末尾. o)将对象 插入到向量的指定位置. 将对象o void add(int index, Object o)将对象o插入到向量的指定位置. o)将对象 添加到向量的末尾. 将对象o void addElements(Object o)将对象o添加到向量的末尾. o)判断对象 是否为向量的成员. 判断对象o boolean contains(Object o)判断对象o是否为向量的成员. index)获取指定位置处的成员 获取指定位置处的成员. Object elementAt(int index)获取指定位置处的成员. index)获取此向量指定位置处的成员 获取此向量指定位置处的成员. Object get(int index)获取此向量指定位置处的成员. firstElement()获取此向量的第一个成员 获取此向量的第一个成员. Object firstElement()获取此向量的第一个成员. lastElement()获取此向量的最后一个成员 获取此向量的最后一个成员. Object lastElement()获取此向量的最后一个成员.
堆栈
堆栈是一种”后进先出”的数据结构, 堆栈是一种”后进先出”的数据结构,只能在一端 进行输入或输出数据的操作. 进行输入或输出数据的操作.堆栈把第一个放入该 堆栈的数据放在最底下, 堆栈的数据放在最底下,而把后续放入的数据放在 已有数据的顶上,如图所示. 已有数据的顶上,如图所示.
树集
• 树集是有一些节点对象组成的数据结构 节 树集是有一些节点对象组成的数据结构,节 点按着树形一层一层的排列,如下图所示 如下图所示. 点按着树形一层一层的排列 如下图所示
源自文库
1 .创建链表 创建链表
使用java.util 包中的LinkedList类创建一个链表.例如, LinkedList类创建一个链表 使用java.util 包中的LinkedList类创建一个链表.例如, LinkedList mylist=new LinkedList(); 创建了一个空链表.然后mylist链表可以使用add() mylist链表可以使用add()方法向 创建了一个空链表.然后mylist链表可以使用add()方法向 这个链表依次增加节点. 这个链表依次增加节点.例如 mylist.add(“It );mylist.add(“is It”);mylist.add( is”); mylist.add( It );mylist.add( is ); mylist.add(“a );mylist.add( door”); );mylist.add(“door mylist.add( a”);mylist.add( door ); mylist可以使用方法 mylist可以使用方法 i)获取第 个节点中存储的数据. 获取第i public Object get(index i)获取第i个节点中存储的数据. 存放在节点中的数据都被看作是一个Object 对象. 存放在节点中的数据都被看作是一个Object 对象.
26.1链表 链表
如果需要处理一些类型相同的数据, 如果需要处理一些类型相同的数据,人们习惯上使用数组 这种数据结构,但数组在使用之前必须定义大小, 这种数据结构,但数组在使用之前必须定义大小,而且不能 动态定义大小. 动态定义大小.有时可能给数组分配了太多的单元而浪费 了宝贵的内存资源,糟糕的一方面是, 了宝贵的内存资源,糟糕的一方面是,程序运行时需要处理 的数据可能多于数组的单元. 的数据可能多于数组的单元.当需要动态地减少或增加数 据项时,可以使用链表这种数据结构. 据项时,可以使用链表这种数据结构.
public boolean removeElementAt(int index) 删除指定位 置处的成员. 置处的成员. public Object set(int index,Object o) 把指定位置处的 成员用o替换掉. 成员用o替换掉. index)把指定位 public void setElementAt(Object o,int index)把指定位 置处的成员用o替换掉. 置处的成员用o替换掉. elements()获取一个枚举对象 获取一个枚举对象. public Enumeration elements()获取一个枚举对象.
由于任何类都是Object 类的子类, 注:由于任何类都是Object 类的子类,因此可以把任 何一个对象作为链表的节点对象.需要注意的是当使 何一个对象作为链表的节点对象. get()获取一个节点对象后 获取一个节点对象后, 用get()获取一个节点对象后,要用类型转换运算符 转化回原来的类型. 转化回原来的类型.
链表是由若干个称作节点的对象组成的一种数据结构, 链表是由若干个称作节点的对象组成的一种数据结构,每 个节点含有一个数据和下一个节点对象的引用( 个节点含有一个数据和下一个节点对象的引用(单链表 ), 或含有一个数据并含有上一个节点对象的引用和下一个节 点对象的引用(双链表) 点对象的引用(双链表) .
import java.util.*; public class LinkListOne{ public static void main(String args[]){ LinkedList mylist=new LinkedList(); mylist.add("It"); //链表中的第一个节点 链表中的第一个节点. 链表中的第一个节点 mylist.add("is"); //链表中的第二个节点 链表中的第二个节点. 链表中的第二个节点 mylist.add("a"); //链表中的第三个节点 链表中的第三个节点. 链表中的第三个节点 mylist.add("door"); //链表中的第四个节点 链表中的第四个节点. 链表中的第四个节点 int number=mylist.size(); //获取链表的长度 获取链表的长度. 获取链表的长度 for(int i=0;i<number;i++){ String temp=(String)mylist.get(i); System.out.println("第"+i+"节点中的数据 节点中的数据:"+temp); 第 节点中的数据 } } }
• linkedlist.java
26.4散列表 散列表
散列表是使用相关关键字查找被存储的数据项的 一种数据结构,关键字不可以发生逻辑冲突, 一种数据结构,关键字不可以发生逻辑冲突,即不 要两个数据项使用相同的关键字, 要两个数据项使用相同的关键字,如果出现两个数 据项对应相同的关键字,那么, 据项对应相同的关键字,那么,先前散列表中的数 据项将被替换. 据项将被替换.散列表在它需要更多的存储空间时 会自动增大容量. 会自动增大容量. 例如,如果散列表的装载因子是0.75, 0.75,那么当散列 例如,如果散列表的装载因子是0.75,那么当散列 表的容量被使用了75% 75%时 表的容量被使用了75%时,它就把容量增加到原始 容量的2 容量的2倍. 对于数组和链表这两种数据结构, 对于数组和链表这两种数据结构,如果要查找它们 存储的某个特定的元素却不知道它的位置, 存储的某个特定的元素却不知道它的位置,就需要 从头开始访问元素直到找到匹配的为止; 从头开始访问元素直到找到匹配的为止;如果数 据结构中包含很多的元素,就会浪费时间. 据结构中包含很多的元素,就会浪费时间.这时最 好使用散列表来存储要查找的数据. 好使用散列表来存储要查找的数据.
• hastable.java
26.5 Vector 向量
Java的 java.util包中的Vector类负责创建一个向量对象 包中的Vector类负责创建一个向量对象. Java的 java.util包中的Vector类负责创建一个向量对象. 如果你已经学会使用数组,那么很容易就会使用向量. 如果你已经学会使用数组,那么很容易就会使用向量.当我 们创建一个向量时不用象数组那样必须要给出数组的大小. 们创建一个向量时不用象数组那样必须要给出数组的大小. 向量创建后,例如,Vector Vector(),a可以使用 向量创建后,例如,Vector a=new Vector(),a可以使用 o)把任何对象添加到向量的末尾 把任何对象添加到向量的末尾, add(Object o)把任何对象添加到向量的末尾,向量的大小 会自动的增加.可以使用add(int o)把一个 会自动的增加.可以使用add(int index ,Object o)把一个 对象追加到该向量的指定位置. 对象追加到该向量的指定位置. 向量a可以使用elementAt(int )获取指定索引处的 向量a可以使用elementAt(int index )获取指定索引处的 向量的元素(索引初始位置是0 可以使用方法size() size()获 向量的元素(索引初始位置是0)a可以使用方法size()获 取向量所含有的元素的个数.另外, 取向量所含有的元素的个数.另外,与数组不同的是向量的 元素类型不要求一致.需要注意的是, 元素类型不要求一致.需要注意的是,当你把某一种类型的 对象放入一个向量后,数据被默认为是Object 对象, 对象放入一个向量后,数据被默认为是Object 对象,因此当 向量中取出一个元素时应用强制类型转化运算符转化为原 来的类型. 来的类型.
获取对象o public int indexOf(Object o) 获取对象o在此向量中首次出现 的位置. 的位置. public int indexOf(Object o,int index) 从指定位置查找对象 在此向量中首次现的位置. o 在此向量中首次现的位置. 获取对象o public int lastIndexOf(Object o) 获取对象o在此向量中最后 出现的位置. 出现的位置. 对象o public int lastIndexOf(Object o,int index) 对象o在此向量 位置index之前最后出现的位置. index之前最后出现的位置 位置index之前最后出现的位置. public Object remove(int index) 从此向量中删除指定位置处 的成员,并返回这个成员. 的成员,并返回这个成员. 删除向量的所有成员. public void removeAllElements() 删除向量的所有成员. public boolean removeElement(Object o) 删除第一次出现的成 员o.
我们在编写程序时经常要和各种数据打交道, 我们在编写程序时经常要和各种数据打交道,为处理这些 数据所选的数据结构对于我们的程序的运行效率是非常重要的. 数据所选的数据结构对于我们的程序的运行效率是非常重要的. 这章讲述几种常见的数据结构的Java 实现. 这章讲述几种常见的数据结构的Java 实现. 在学习数据结构这门课程的时候, 在学习数据结构这门课程的时候,人们要用具体的算法去实 现相应的数据结构,例如,为了实现链表这种数据结构, 现相应的数据结构,例如,为了实现链表这种数据结构,需要实 现往链表中插入节点或从链表中删除节点的算法, 现往链表中插入节点或从链表中删除节点的算法,感觉有些烦 琐. 之后,Java 提供了实现常见数据结构的类, 在jdk1.2 之后,Java 提供了实现常见数据结构的类,创建 链表等数据结构和创建数组一样简单, 链表等数据结构和创建数组一样简单,不再需要你去写具体的 算法.我们主要讲述这些类的用法, 算法.我们主要讲述这些类的用法,但对这些数据结构的原理的 掌握对于我们熟练地用好这些类还是很有帮助的. 掌握对于我们熟练地用好这些类还是很有帮助的.
Vector类的常用方法 类的常用方法
public public public public public public public public boolean add(Object o) 将对象o添加到向量的末尾. 将对象o添加到向量的末尾. o)将对象 插入到向量的指定位置. 将对象o void add(int index, Object o)将对象o插入到向量的指定位置. o)将对象 添加到向量的末尾. 将对象o void addElements(Object o)将对象o添加到向量的末尾. o)判断对象 是否为向量的成员. 判断对象o boolean contains(Object o)判断对象o是否为向量的成员. index)获取指定位置处的成员 获取指定位置处的成员. Object elementAt(int index)获取指定位置处的成员. index)获取此向量指定位置处的成员 获取此向量指定位置处的成员. Object get(int index)获取此向量指定位置处的成员. firstElement()获取此向量的第一个成员 获取此向量的第一个成员. Object firstElement()获取此向量的第一个成员. lastElement()获取此向量的最后一个成员 获取此向量的最后一个成员. Object lastElement()获取此向量的最后一个成员.
堆栈
堆栈是一种”后进先出”的数据结构, 堆栈是一种”后进先出”的数据结构,只能在一端 进行输入或输出数据的操作. 进行输入或输出数据的操作.堆栈把第一个放入该 堆栈的数据放在最底下, 堆栈的数据放在最底下,而把后续放入的数据放在 已有数据的顶上,如图所示. 已有数据的顶上,如图所示.
树集
• 树集是有一些节点对象组成的数据结构 节 树集是有一些节点对象组成的数据结构,节 点按着树形一层一层的排列,如下图所示 如下图所示. 点按着树形一层一层的排列 如下图所示
源自文库
1 .创建链表 创建链表
使用java.util 包中的LinkedList类创建一个链表.例如, LinkedList类创建一个链表 使用java.util 包中的LinkedList类创建一个链表.例如, LinkedList mylist=new LinkedList(); 创建了一个空链表.然后mylist链表可以使用add() mylist链表可以使用add()方法向 创建了一个空链表.然后mylist链表可以使用add()方法向 这个链表依次增加节点. 这个链表依次增加节点.例如 mylist.add(“It );mylist.add(“is It”);mylist.add( is”); mylist.add( It );mylist.add( is ); mylist.add(“a );mylist.add( door”); );mylist.add(“door mylist.add( a”);mylist.add( door ); mylist可以使用方法 mylist可以使用方法 i)获取第 个节点中存储的数据. 获取第i public Object get(index i)获取第i个节点中存储的数据. 存放在节点中的数据都被看作是一个Object 对象. 存放在节点中的数据都被看作是一个Object 对象.
26.1链表 链表
如果需要处理一些类型相同的数据, 如果需要处理一些类型相同的数据,人们习惯上使用数组 这种数据结构,但数组在使用之前必须定义大小, 这种数据结构,但数组在使用之前必须定义大小,而且不能 动态定义大小. 动态定义大小.有时可能给数组分配了太多的单元而浪费 了宝贵的内存资源,糟糕的一方面是, 了宝贵的内存资源,糟糕的一方面是,程序运行时需要处理 的数据可能多于数组的单元. 的数据可能多于数组的单元.当需要动态地减少或增加数 据项时,可以使用链表这种数据结构. 据项时,可以使用链表这种数据结构.
public boolean removeElementAt(int index) 删除指定位 置处的成员. 置处的成员. public Object set(int index,Object o) 把指定位置处的 成员用o替换掉. 成员用o替换掉. index)把指定位 public void setElementAt(Object o,int index)把指定位 置处的成员用o替换掉. 置处的成员用o替换掉. elements()获取一个枚举对象 获取一个枚举对象. public Enumeration elements()获取一个枚举对象.
由于任何类都是Object 类的子类, 注:由于任何类都是Object 类的子类,因此可以把任 何一个对象作为链表的节点对象.需要注意的是当使 何一个对象作为链表的节点对象. get()获取一个节点对象后 获取一个节点对象后, 用get()获取一个节点对象后,要用类型转换运算符 转化回原来的类型. 转化回原来的类型.
链表是由若干个称作节点的对象组成的一种数据结构, 链表是由若干个称作节点的对象组成的一种数据结构,每 个节点含有一个数据和下一个节点对象的引用( 个节点含有一个数据和下一个节点对象的引用(单链表 ), 或含有一个数据并含有上一个节点对象的引用和下一个节 点对象的引用(双链表) 点对象的引用(双链表) .
import java.util.*; public class LinkListOne{ public static void main(String args[]){ LinkedList mylist=new LinkedList(); mylist.add("It"); //链表中的第一个节点 链表中的第一个节点. 链表中的第一个节点 mylist.add("is"); //链表中的第二个节点 链表中的第二个节点. 链表中的第二个节点 mylist.add("a"); //链表中的第三个节点 链表中的第三个节点. 链表中的第三个节点 mylist.add("door"); //链表中的第四个节点 链表中的第四个节点. 链表中的第四个节点 int number=mylist.size(); //获取链表的长度 获取链表的长度. 获取链表的长度 for(int i=0;i<number;i++){ String temp=(String)mylist.get(i); System.out.println("第"+i+"节点中的数据 节点中的数据:"+temp); 第 节点中的数据 } } }
• linkedlist.java
26.4散列表 散列表
散列表是使用相关关键字查找被存储的数据项的 一种数据结构,关键字不可以发生逻辑冲突, 一种数据结构,关键字不可以发生逻辑冲突,即不 要两个数据项使用相同的关键字, 要两个数据项使用相同的关键字,如果出现两个数 据项对应相同的关键字,那么, 据项对应相同的关键字,那么,先前散列表中的数 据项将被替换. 据项将被替换.散列表在它需要更多的存储空间时 会自动增大容量. 会自动增大容量. 例如,如果散列表的装载因子是0.75, 0.75,那么当散列 例如,如果散列表的装载因子是0.75,那么当散列 表的容量被使用了75% 75%时 表的容量被使用了75%时,它就把容量增加到原始 容量的2 容量的2倍. 对于数组和链表这两种数据结构, 对于数组和链表这两种数据结构,如果要查找它们 存储的某个特定的元素却不知道它的位置, 存储的某个特定的元素却不知道它的位置,就需要 从头开始访问元素直到找到匹配的为止; 从头开始访问元素直到找到匹配的为止;如果数 据结构中包含很多的元素,就会浪费时间. 据结构中包含很多的元素,就会浪费时间.这时最 好使用散列表来存储要查找的数据. 好使用散列表来存储要查找的数据.
• hastable.java
26.5 Vector 向量
Java的 java.util包中的Vector类负责创建一个向量对象 包中的Vector类负责创建一个向量对象. Java的 java.util包中的Vector类负责创建一个向量对象. 如果你已经学会使用数组,那么很容易就会使用向量. 如果你已经学会使用数组,那么很容易就会使用向量.当我 们创建一个向量时不用象数组那样必须要给出数组的大小. 们创建一个向量时不用象数组那样必须要给出数组的大小. 向量创建后,例如,Vector Vector(),a可以使用 向量创建后,例如,Vector a=new Vector(),a可以使用 o)把任何对象添加到向量的末尾 把任何对象添加到向量的末尾, add(Object o)把任何对象添加到向量的末尾,向量的大小 会自动的增加.可以使用add(int o)把一个 会自动的增加.可以使用add(int index ,Object o)把一个 对象追加到该向量的指定位置. 对象追加到该向量的指定位置. 向量a可以使用elementAt(int )获取指定索引处的 向量a可以使用elementAt(int index )获取指定索引处的 向量的元素(索引初始位置是0 可以使用方法size() size()获 向量的元素(索引初始位置是0)a可以使用方法size()获 取向量所含有的元素的个数.另外, 取向量所含有的元素的个数.另外,与数组不同的是向量的 元素类型不要求一致.需要注意的是, 元素类型不要求一致.需要注意的是,当你把某一种类型的 对象放入一个向量后,数据被默认为是Object 对象, 对象放入一个向量后,数据被默认为是Object 对象,因此当 向量中取出一个元素时应用强制类型转化运算符转化为原 来的类型. 来的类型.
获取对象o public int indexOf(Object o) 获取对象o在此向量中首次出现 的位置. 的位置. public int indexOf(Object o,int index) 从指定位置查找对象 在此向量中首次现的位置. o 在此向量中首次现的位置. 获取对象o public int lastIndexOf(Object o) 获取对象o在此向量中最后 出现的位置. 出现的位置. 对象o public int lastIndexOf(Object o,int index) 对象o在此向量 位置index之前最后出现的位置. index之前最后出现的位置 位置index之前最后出现的位置. public Object remove(int index) 从此向量中删除指定位置处 的成员,并返回这个成员. 的成员,并返回这个成员. 删除向量的所有成员. public void removeAllElements() 删除向量的所有成员. public boolean removeElement(Object o) 删除第一次出现的成 员o.