zoukankan      html  css  js  c++  java
  • java-背包的实现

      背包的定义:

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

          背包的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);
    }

    }

    }

       

  • 相关阅读:
    android原子
    android进程优先级
    Android 的cyclicBarrier
    android中运用CountDownLatch
    java网络编程长连接的问题
    https
    http 上传文件
    netty4 断线重连
    Linux下高并发socket最大连接数所受的各种限制
    Android Studio NDK及so文件开发
  • 原文地址:https://www.cnblogs.com/caibixiang123/p/9256915.html
Copyright © 2011-2022 走看看