java-背包的實現

來源:互聯網
上載者:User

標籤:介面   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-背包的實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.