设计一个泛型类Collection

要求:设计一个泛型类Collection,它存储object对象的集合(在数组中),以及该集合当前的大小。提供public方法isEmtpy,makeEmpty,insert,remove,isPresent.方法isPresent(x)当且仅当在集合中存在(由equals定义) 等于x的一个object时返回true

  

public class Collection {
	private Object[] obj;

	public Object[] getObj() {
		return obj;
	}

	public void setObj(Object[] obj) {
		this.obj = obj;
	}

	public boolean isEmpty() {
		return obj.length > 0 ? false : true;
	};

	public void makeEmpty() {
		obj = new Object[] {};
	}

	public void insert(Object o) {
		//扩展数组容量
		Object[] temp = new Object[obj.length + 1];
		//拷贝原有数组
		for (int i = 0; i < obj.length; i++) {
			temp[i] = obj[i];
		}
		//末位添加新元素
		temp[obj.length] = o;
		obj = temp;
	}

	public boolean isPresent(Object o) {
		if (obj.length == 0) {
			return false;
		}
		//遍历判断
		for (Object ob : obj) {
			if (o.equals(ob))
				return true;
		}
		return false;
	}

	/**
	 * <p>
	 * 此处写的很复杂,应该有更简单的方法实现
	 * </p>
	 */
	public void remove(Object o) {
		if (obj.length == 0) {
			return;
		}
		int count = 0;
		for (int i = 0; i < obj.length; i++) {
			if (o.equals(obj[i])) {
				obj[i] = null;
				count++;
			}
		}

		Object[] temp = new Object[obj.length - count];
		int i = 0;
		for (Object ob : obj) {
			if (ob != null) {
				temp[i] = ob;
				i++;
			}
		}
		obj = temp;
	}

	@Override
	public String toString() {
		return "obj=" + Arrays.toString(obj);
	}

	public static void main(String[] args) {
		Object[] ob = new Object[] { 1, 2, "haha", 4, true, 6, 3042F };
		Collection test2 = new Collection();
		test2.setObj(ob);
		System.err.println(test2.toString());
		test2.insert(8);
		System.err.println(test2.toString());
		test2.remove(4);
		System.err.println(test2.toString());
		test2.remove("haha");
		System.err.println(test2.toString());
	}
}

  

时间: 2024-10-12 17:28:04

设计一个泛型类Collection的相关文章

设计一个泛型类orderedCollection

设计一个泛型类orderedCollection,它存储的Comparable对象的集合(在数组中),以及该集合的当前大小.提供public方法isEmpty,makeEmpty,insert,remove,findMin和 findMax. finfMin和findMax分别返回该集合中最小的和最大T对象的引用(如果该集合为空,则返回null) /** * <p> * 设计一个泛型类orderedCollection,它存储的Comparable对象的集合(在数组中), * 以及该集合的当前

[JCIP笔记] (三)如何设计一个线程安全的对象

在当我们谈论线程安全时,我们在谈论什么中,我们讨论了怎样通过Java的synchronize机制去避免几个线程同时访问一个变量时发生问题.忧国忧民的Brian Goetz大神在多年的开发过程中,也悟到了人性的懒惰,他深知许多程序员不会在设计阶段就考虑到线程安全,只是假设自己的代码能按照自己的想法很好地运转.然而当程序上线.线程安全问题真的发生时,要花费多于前期设计数倍的时间和精力去进行排查.解决,甚至重新设计.于是,他在字里行间一直秉持一种"凡事皆可发生"的小心翼翼的哲学,并以这种哲学

Android 设计一个菱形形状的Imageview组件.

网上没有资料,特来请教下大神 Android 设计一个菱形形状的Imageview组件. >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007107851/Android设计一个菱形形状的Imageview组件.html

设计一个程序能够将某一个目录下面的所有文件名打印出来---File类的使用

,设计一个程序能够将某一个目录下面的所有文件名打印出来 运用到的方法有:返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录:list()           测试此抽象路径名表示的文件是否是一个目录:isDirectory()           返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件:listFiles() package printfilename; import java.io.File; public class PrintFileNam

深度学习:从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点?

深度学习工具潮流滚滚,各种工具层出不穷.也有各种文章从易用性,可移植性,灵活性和效率方面对于各个系统进行比较.这篇文章希望从系统设计上面来讲来回答这个讨论这个问题:如果想到从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点. 计算单元:从layer abstraction到operator 大家熟悉的第一代深度学习系统,以cuda-convnet21和caffe为代表.这些系统主要的一大特点是提出了一个以深度学习计算层次layer为基本单元的计算单位.不同的laye

线程池? 如何设计一个动态大小的线程池,有哪些方法?

[线程池?  如何设计一个动态大小的线程池,有哪些方法?] 线程池:顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中, 需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中, 从而减少创建和销毁线程对象的开销. 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.此时,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 与数据库连接池相似,线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable

设计一个字节数组缓存类

转 http://blog.csdn.net/kakashi8841/article/details/42025367 版权所有,转载须注明出处! 1.为什么要 在做网络通信的时候,经常需要用到: 读:就是我们需要从网络流里面读取字节数据,并且由于分包的原因,我们需要自己缓存这些数据,而不是读完立刻丢掉. 写:我们需要把各种类型的数据变成字节写入.比如把int.string.short等变成字节数组写入流. 2.需要什么 我们需要设计一个类来实现: 支持可以不停地往这个类中添加字节 支持写入in

如何设计一个基于云计算的大型分布式系统

当今云计算被炒的沸沸扬扬,云计算显然已经是软件行业的大势所趋,如何设计一个基于云计算的大型分布式系统呢,下面基于云计算架构大型分布式系统展开鄙人的一点短浅的理解与见识. 首先,整个系统包含若干个系统模块,也就是子系统,每个子系统都单独的运行于一个计算机集群中,每个计算机集群包含若干台计算机. 其次,要设计一个整个系统的核心调度系统,这个调度系统运行在一个单独的计算机集群中,我们姑且将这个计算机集群叫做集群A,而这个核心调度系统只是负责记录系统的核心日志,存储每个子系统的文件位置块与索引,负责调度

设计一个 iOS 控件

代码的等级:可编译.可运行.可测试.可读.可维护.可复用 前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内:而一个好的控件除了有对外一致的体验之外,还有其内在特征: 灵活性 低耦合 易拓展 易维护 通常特征之间需要做一些取舍,比如灵活性与耦合度,有时候接口越多越能适应各种环境,但是接口越少对外产生的依赖就越少,维护起来也更容易.通常一些前期看起来