数据结构——集合
来源:互联网 发布:pic单片机重启 编辑:程序博客网 时间:2024/06/06 09:17
集合是具有某种相似特性的事物的全体。它的重要特点是其中的数据元素无序且不重复,这也就是判断是否使用该容器的依据。
集合类既可以基于向量类来实现,也可以用其他方法比如基于哈希表来实现,本文讨论基于向量类。首先我们要在上文建立的向量类中添加四个函数,以方便集合类的设计。
四个函数如下:
public int indexOf(Object element){if(element == null){for(int i=0;i<elementCount;i++)if(elementData[i] == null) return i;}else{for(int i=0;i<elementCount;i++)if(element.equals(elementData[i]))return i;}return -1;}public boolean contain(Object element){return indexOf(element)>=0;}public void remove(Object element){int i = indexOf(element);if(i>=0){remove(i);}}public void remove(int index){if(index>=elementCount){throw new ArrayIndexOutOfBoundsException(index+">="+elementCount);}else if(index<0){throw new ArrayIndexOutOfBoundsException(index);}int j = elementCount-index-1;if(j>0){System.arraycopy(elementData, index+1, elementData, index, j);}elementCount--;elementData[elementCount] = null;}
接着设计集合类:(主要是集合的属于,包含,相等操作)
package ArrayVectorSetMatrix;/*** @author sun* 创建时间:2017年4月13日下午2:45:16*///基于向量类的集合类实现方法public class MySet {private MyVector values = new MyVector();public void add(Object obj){if(obj == null)return;if(values.indexOf(obj)<0)//判断集合中是否已存在相等元素values.add(obj);}public void remove(Object obj){values.remove(obj);}public boolean contain(Object obj){//数据元素obj是否属于集合return values.contain(obj);}public boolean include(Object obj){//当前对象集合是否包含集合otherSetif(obj instanceof MySet){//首先要判断obj是不是集合MySet set = (MySet)obj;int counter = 0;while(counter<set.values.size()){Object temp = set.values.get(counter);counter++;if(!contain(temp))return false;}return true;}elsereturn false;}public boolean equals(Object obj){//相等if(obj instanceof MySet){MySet set = (MySet)obj;if(include(set) && set.include(this))return true;else return false;}else return false;}public int size(){return values.size();}public boolean isEmpty(){return values.size()>0;}public void print(){int counter = 0;while(counter < values.size()){System.out.print(values.get(counter)+" ");counter++;}}}
测试功能:
package ArrayVectorSetMatrix;/*** @author sun* 创建时间:2017年4月13日下午3:16:06*/public class TestMySet {public static void main(String[] args) {MySet os1 = new MySet();MySet os2 = new MySet();MySet os3 = new MySet();os1.add(new Integer(0));os1.add(new Integer(2));os1.add(new Integer(5));os2.add(new Integer(5));os2.add(new Integer(0));os2.add(new Integer(2));os2.add(new Integer(5));//测试添加重复元素os3.add(new Integer(7));os3.remove(new Integer(7));System.out.print("Set of os1 is:{");os1.print();System.out.println("}");System.out.print("Set of os2 is:{");os2.print();System.out.println("}");System.out.print("Set of os3 is:{");os3.print();System.out.println("}");if(os1.include(os3))System.out.println("os1 including os3");elseSystem.out.println("os1 does not including os3");if(os1.include(os2))System.out.println("os1 including os2");elseSystem.out.println("os1 does not including os2");if(os1.equals(os2))System.out.println("os1 is equal with os2");elseSystem.out.println("os1 is not equal with os2");}}
0 0
- 数据结构——集合
- 数据结构——集合合并
- Redis数据结构——集合
- 数据结构JavaScript——集合
- 集合架构——简单数据结构
- python基础知识——内置数据结构(集合)
- 数据结构实践——集合合并
- 学习javascript数据结构(三)——集合
- 简单说一说数据结构——集合
- 数据结构——集合(JavaScript)
- 黑马程序员——集合体系回顾和数据结构学习
- 数据结构——二叉树的链式存储操作集合
- 数据结构——树的简单操作集合
- 数据结构——单链表(链表操作算法集合)
- 数据结构实践——顺序表:两集合的交集
- 数据结构实践——顺序表:两集合的交集
- Java数据结构笔记1——Java集合框架
- 数据结构——模拟集合的实现(2)
- Qt Quick中布局管理
- 第九到十三单元练习题
- k倍区间(抽屉原理O(n))
- C+实验2
- 一直ping ip地址并且写日志记录
- 数据结构——集合
- SpringMVC 拦截器(Interceptor)的实现及应用
- tar解压到指定的目录
- 十大经典排序算法js实现
- keras.model的保存与打开
- 局部刷新
- jsp图片显示问题(绝对路径和相对路径)
- c语言函数strstr分析
- View与Controller的连接