集合顺序存储结构的实现和操作

具体的Demo:

Set接口:

public interface Set {

	/**
	 * @introduction 向集合中增加一个元素
	 * @param object
	 * @return
	 * @author Guo
	 */
	public boolean add(Object object);
	
	/**
	 * @introduction 从集合中删除一个元素
	 * @param object
	 * @return
	 * @author Guo
	 */
	public boolean remove(Object object);
	
	/**
	 * @introduction 判断一个元素是否属于这个集合
	 * @param object
	 * @return
	 * @author Guo
	 */
	public boolean contains(Object object);
	
	/**
	 * @introduction 返回集合中第index个元素的值
	 * @param index
	 * @return
	 * @author Guo
	 */
	public Object value(int index);
	
	/**
	 * @introduction 从集合中查找object并返回
	 * @param object
	 * @return
	 * @author Guo
	 */
	public Object find(Object object);
	
	/**
	 * @introduction  返回集合中元素的个数
	 * @return
	 * @author Guo
	 */
	public int size();
	
	/**
	 * @introduction 判断集合是否为空
	 * @return
	 * @author Guo
	 */
	public boolean isEmpty();
	
	/**
	 * @introduction 输出集合中所有的元素
	 * @author Guo
	 */
	public void output();
	
	/**
	 * @introduction 返回当前集合与参数集合set的并集
	 * @param set
	 * @return
	 * @author Guo
	 */
	public Set union(Set set);
	
	/**
	 * @introduction 返回当前集合与参数集合set的交集
	 * @param set
	 * @return
	 * @author Guo
	 */
	public Set intersection(Set set);
	
	/**
	 * @introduction 清除集合中的元素
	 * @author Guo
	 */
	public void clear();
}


 

SequenceSet类:

/**
 * @introduction 顺序存储结构的实现
 * @author Guo
 *
 */
public class SequenceSet implements Set{
	
	/**
	 * @introduction minSize为数组的初始长度
	 * @introduction array底层数组
	 * @introduction len集合当前的长度
	 * @author Guo
	 */
	private final int minSize = 10;
	private Object[] array;
	private int len;
	
	/**
	 * @introduction 无参的构造方法,初始化数组
	 * @author Guo
	 */
	public SequenceSet() {
	
		len = 0;
		array = new Object[minSize];
	}
	
	/**
	 * @introduction 指定长度的构造方法
	 * @param length
	 * @author Guo
	 */
	public SequenceSet(int length) {
		
		if(length < minSize)
			length = minSize;
		len = 0;
		array = new Object[length];
	}

	@Override
	public boolean add(Object object) {
		
		if(contains(object))
			return false;
		
		if(len == array.length) {
			
			Object[] arrayTemp = new Object[len*2];
			for(int i = 0; i < len; i++)
				arrayTemp[i] = array[i];
			array = arrayTemp;
		}
		array[len] = object;
		len++;
		return true;
	}

	@Override
	public boolean remove(Object object) {
		
		int i;
		for(i = 0; i < len; i++)
			if(array[i].equals(object))
				break;
		
		if(i < len) {
			
			array[i] = array[len-1];
			len--;
			return true;
		}
		else
			return false;
	}

	@Override
	public boolean contains(Object object) {
		
		for(int i = 0; i < len; i++)
			if(array[i].equals(object))
				return true;
		return false;
	}

	@Override
	public Object value(int index) {
		
		if(index <= 0 || index > len)
			return null;
		return array[index-1];
	}

	@Override
	public Object find(Object object) {
		
		for(int i = 0; i < len; i++)
			if(array[i].equals(object))
				return array[i];
		return null;
	}

	@Override
	public int size() {
		return len;
	}

	@Override
	public boolean isEmpty() {
		return len == 0;
	}

	@Override
	public void output() {
		
		for(int i = 0; i < len; i++)
			System.out.print(array[i] + " ");
		System.out.println();
	}

	@Override
	public Set union(Set set) {
		
		SequenceSet dset = (SequenceSet)set;
		SequenceSet setTemp = new SequenceSet(len + dset.len);
		int i;
		for(i = 0; i < len; i++)
			setTemp.array[i] = array[i];
		setTemp.len = len;
		for(i = 0; i < dset.len; i++) {
			
			Object object = dset.array[i];
			if(!contains(object))
				setTemp.array[setTemp.len++] = object;
		}
		return setTemp;
	}

	@Override
	public Set intersection(Set set) {

		SequenceSet dset = (SequenceSet)set;
		int length;
		if(len < dset.len)
			length = len;
		else
			length = dset.len;
		SequenceSet setTemp = new SequenceSet(length);
		for(int i = 0; i < dset.len; i++) {
			
			Object object = dset.array[i];
			if(contains(object))
				setTemp.array[setTemp.len++] = object;
		}
		return setTemp;
	}

	@Override
	public void clear() {
		len = 0;
	}
}


 

 

操作类:

public class TestSequenceSet {

	@Test
	public void testAdd() {
		
		Set set = new SequenceSet();
		set.add("zhou");
		set.add("yan");
		set.add("ping");
		set.output();
	}
	
	@Test
	public void testRemove() {
		
		Set set = new SequenceSet();
		set.add("xu");
		set.add("jian");
		set.add("guo");
		set.remove("xu");
		set.output();
		if(!set.remove("xu"))
			System.out.println("Not In Set");
	}
	
	@Test
	public void testContains() {
		
		Set set = new SequenceSet();
		set.add("zhou");
		if(set.contains("zhou"))
			System.out.println("In Set");
		else
			System.out.println("Not In Set");
		if(set.contains("xu"))
			System.out.println("In Set");
		else
			System.out.println("Not In Set");
	}
	
	@Test
	public void testValue() {
		
		Set set = new SequenceSet();
		set.add("zhou");
		set.add("xu");
		System.out.println(set.value(1));
		System.out.println(set.value(4));
	}
	
	@Test
	public void testFind() {
		
		Set set = new SequenceSet();
		set.add("xu");
		set.add("zhou");
		System.out.println(set.find("zhou"));
		System.out.println(set.find("xxx"));
	}
	
	@Test
	public void testSize() {
		
		Set set = new SequenceSet();
		set.add("xu");
		set.add("zhou");
		System.out.println(set.size());
	}
	
	@Test
	public void testIsEmpty() {
		
		Set set = new SequenceSet();
		System.out.println(set.isEmpty());
		set.add("zhou");
		System.out.println(set.isEmpty());
	}
	
	@Test
	public void testUnion() {
		
		Set set = new SequenceSet();
		set.add("xu");
		set.add("zhou");
		Set setCopy = new SequenceSet();
		setCopy.add("xu");
		setCopy.add("yan");
		set.union(setCopy).output();
	}
	
	@Test
	public void testIntersection() {
		
		Set set = new SequenceSet();
		set.add("xu");
		set.add("zhou");
		Set setCopy = new SequenceSet();
		setCopy.add("zhou");
		set.add("guo");
		set.intersection(setCopy).output();
	}
	
	@Test
	public void testClear() {
		
		Set set = new SequenceSet();
		set.add("xu");
		set.add("zhou");
		set.clear();
		set.output();
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值