Java泛型数组
来源:互联网 发布:linux jar打包命令 编辑:程序博客网 时间:2024/06/06 20:50
- 最近使用Java实现队列、栈这些基本的数据结构时,我分别采用了LinkedList列表和ResizeArray可变数来实现,先看看基本的API:
/* * 栈API: 抽象出基本的栈的操作 */public interface Stack<T> { /* * 出栈 */ public T pop(); /* * 进栈 */ public void push(T item); /* * 判断栈是否为空 */ public boolean isEmpty();}
- 使用链表结构实现栈数据结构:
/* * 使用链表实现Stack */public class StackLinkedList<T> implements Stack<T>{ /* * 栈顶元素 */ private Node<T> first = null; //栈顶元素初始化为null /* * 私有类实现节点对象 */ @SuppressWarnings("hiding") private class Node<T>{ T item; Node<T> next; } @Override public T pop() { T item = first.item; first = first.next; return item; } @Override public void push(T item) { Node<T> oldfirst = first; first = new Node<T>(); first.item = item; first.next = oldfirst; } @Override public boolean isEmpty() { return first==null; }}
- 使用可变数组时出现了一些问题,首先需要考虑的是使用数组时扩容的问题,我分别采取的是:
- 当数组满了时,将数组容量扩大一倍;
- 当数组元素不足数组容量的1/4时将数组容量缩小一半
- 另一个问题是无法初始化泛型数组,采取的方式是先创建一个Object[]数组,然后将其强制类型转换为T[],但实际上这种强制类型转换是很不友好的,但我不得不这么做(⊙o⊙)…
public class StackResizeArray<T> implements Stack<T>{ /* * 使用数组存储栈中元素 */ private T[] array; /* * 栈顶元素的下一个位置 */ private int n; /* * 构造函数初始化数组容量为1 */ @SuppressWarnings("unchecked") public StackResizeArray(){ array = (T[])new Object[1]; //数组不能直接初始化为泛型数组,必须像这样先申明为Object再强制类型转换 n = 0; } /* * 改变数组容量 */ @SuppressWarnings("unchecked") private void resize(int capacity) { T[] newarray = (T[])new Object[capacity]; for(int i=0; i<n; i++){ newarray[i] = array[i]; } array = newarray; } /* * 出栈: 当数组元素不足1/4时将数组大小缩小一半 */ @Override public T pop() { T item = array[--n]; array[n] = null; //手动释放出栈元素,便于垃圾回收 if(n>0 && n<array.length/4){ resize(array.length/2); } return item; } /* * 入栈: 当数组满时将数组容量扩大一倍 */ @Override public void push(T item) { if(n==array.length){ resize(array.length*2); } array[n++] = item; } @Override public boolean isEmpty() { return n==0; }}
阅读全文
1 0
- Java 泛型数组
- Java 泛型数组
- Java 泛型数组
- Java 泛型数组
- java 泛型数组
- Java泛型数组
- Java 泛型数组
- Java 泛型数组
- java泛型数组
- Java 泛型数组
- java 泛型数组
- Java 泛型数组
- Java 泛型数组
- Java泛型数组
- Java泛型列表数组
- Java泛型数组列表
- Java数组与泛型
- Java数组与泛型
- 设计模式-单例模式
- 使用Java和Scala在IDE中实战RDD和DataFrame转换操作
- 自定义标签
- 广告策略评估指标(算法实习day2)
- javaSwing_2环境搭建
- Java泛型数组
- Sql Server 'Saving changes is not permitted' error Prevent saving changes that require table re-cr
- cookie和session
- PostgreSQL入门教程
- 五谷杂粮加盟运营是经济的新趋势
- SDUT-数据结构实验之二叉树一:树的同构
- VS常用快捷键
- sqlserver 索引
- hive中的排序语法