基础的集合实现

Posted linma

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础的集合实现相关的知识,希望对你有一定的参考价值。

引用
《算法4》1.3.2.5 迭代

特点:小巧精妙

  • 自动扩缩容
  • 避免对象游离
  • 使用数组能够高效检索数据
  • 实现Iterable 对外提供 Iterator
  • Bag、Queue、Stack、List基本都可以依葫芦画瓢
  • 这是一个线程不安全的实现类
import java.util.Iterator;

public class ResizingArrayStack<Item> implements Iterable<Item> {
    private Item[] a = new (Item[]) new Object[1]; 	// 栈元素
    private int N = 0;								// 元素数量
    public boolean isEmpty() {return N == 0;}
    public int size() {return N;}
    
    private void resize(int max) {
        // 将栈移动到一个大小为max的新数组
        Item[] temp = (Item[]) new Object[max];
        for (int i=0; i<N; i++)
            temp[i] = a[i];
        a = temp;
    }
    
    public void push(Item item) {
        // 将元素添加到栈顶
        if (N == a.length) resize(2*a.length);
        a[N++] = item;
    }
    
    public Item pop() {
        // 从栈顶删除元素
        Item item = a[--N];
        //避免对象游离
        a[N] == null;	
        if (N > 0 && N == a.length/4) resize(a.length/2);
        return item;
    }
    
    public Iterator<Item> iterator() {return new ReverseArrayIterator();}
    
    public class ReverseArrayIterator implements Iterator<Item> {
        // 支持后进先出的迭代
        private int i = N;
        public boolean hashNext() {return i>0;};
        public Item next() {return a[--i];}
        public void remove() {}
    }
}

以上是关于基础的集合实现的主要内容,如果未能解决你的问题,请参考以下文章

[ jquery 文档处理 insertBefore(content) before(content|fn) ] 此方法用于把所有匹配的元素插入到另一个指定的元素元素集合的前面,实现外部插入(代码片段

laravel特殊功能代码片段集合

VsCode 代码片段-提升研发效率

金蝶handler中 collection 代码片段理解

阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_5_迭代器的代码实现

比较 C# 中的字符串片段并从集合中删除项目