码迷,mamicode.com
首页 > 编程语言 > 详细

java-背包的实现

时间:2018-07-03 11:38:33      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:接口   add   数组   检查   判断   return   定义   数据   类型   

  背包的定义:

         背包是一种不支持从中删除元素的集合数据类型--它的目的就是帮助用列收集元素并迭代遍历所有收集到的元素(用列也可以检查背包是否为空或者获取背包中元素的数量)。迭代的顺序不确定且与用例无关。

      背包的java代码的实现:

      

package com.learn.bag;
import java.util.Arrays;
import java.util.Iterator;

public class Bag<E> implements Iterable<E> {
private Object[] table; //背包容器内部的数据结构,是一个对象的数组。便于接受任意类型(向上转型)
private static final int DEFAULT_SIZE = 16;//默认容器大小 
private int size;//元素个数

public Bag(){
table=new Object[DEFAULT_SIZE];
}
//添加元素
public void add(E item) {
ensureCapacity();//在新增之前进行容器
table[size++] = item;
}

//容器扩容 参考ArrayList源码的实现

private void ensureCapacity() {
if (size >= table.length) {
int leg = table.length;
int newCapacity=leg + (leg >> 1);//注意要加括号leg+(leg>>1)曾因为没有加括号,数据扩容后,没有起到任何效果,导致数组越界问题。
table = Arrays.copyOf(table, newCapacity);
}

}

//判断元素是否为空

public boolean isEmpty() {
return size == 0;

}

//获取元素的数量

public int size() {
return size;
}

public E get(int i) {
assert i < 0 || i >= size;
return (E)table[i];
}

//因为要实现迭代功能,在java中必须要实现Iterable接口,实现iterator()方法,返回一个可迭代的元素(实现了Iterator接口,hasNext() 方法和next()方法,java语法糖知识)

@Override
public Iterator<E> iterator() {
return new Itr();
}

private class Itr implements Iterator<E> {
private int cursor; //cursor 进行迭代 上下指针移动

@Override
public boolean hasNext() {
return cursor != size();
}
@Override
public E next() {
int i = cursor;
cursor++;
return get(i);
}

}

}

   

java-背包的实现

标签:接口   add   数组   检查   判断   return   定义   数据   类型   

原文地址:https://www.cnblogs.com/caibixiang123/p/9256915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!