以上次队列为例
泛型:
泛指一切数据类型
需要float,就创建一个float类型的数组,
需要char就创建char类型数组。
如果我们只定义了int类型的数据,所能存储下来的数据类型有限。
所以想到了泛型。
在类后面打上"<>",里面可以写任意东西。
比如类型都为王
public class Queue<王> {
private 王[] arr;
private int f =0; //放入
private int r =0; //放出
public Queue(int Size){
arr = (王[]) new Object[Size];
}
//添加数据
public void add(王 value){
if(f - r == arr.length){
王[] brr = (王[]) new Object[arr.length *2];
for (int i = r;i<f;i++){
brr[i] = (王) arr[i % arr.length];
}
arr = brr;
}
arr[f % arr.length] = value;
f++;
}
//取出数据
public void get(){
if (r == f){
System.out.println("已经没有数据了");
return;
}
System.out.println(arr[r % arr.length]);
r++;
}
}
所以王 就是当前的泛型。
public static void main(String[] args){
Queue queue = new Queue(Suze: 8);
queue.add("123");
queue.get();
Queue queue1 = new Queue(Suze: 8);
queue1.add(1);
queue1.get();
}
存储String类型的数据可以。
做个基本的对比:
package zhan;
public class QueueInteger {
private Integer[] arr;//定义Integer的数据
private int f = 0;
private int r =0; //放出
public QueueInteger(int Size){
arr = new Integer[Size];
}
//添加数据
public void add(int value){
if(f - r == arr.length){
Integer[] brr = new Integer[arr.length *2] ;
for (int i = r;i<f;i++){
brr[i] = arr[i % arr.length];
}
arr = brr;
}
arr[f % arr.length] = value;
f++;
}
//取出数据
public void get(){
if (r == f){
System.out.println("已经没有数据了");
return;
}
System.out.println(arr[r % arr.length]);
r++;
}
}
package zhan;
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Queue1 queue1 = new Queue1(8);
queue1.add("123");
queue1.add(1);
queue1.add(1.8);
queue1.get();
queue1.get();
queue1.get();
}
}
java当中定义好的栈和队列。
package duilie;
import java.util.Stack;
public class StackTest {
public static void main(String[] args) {
//java开发人员给我们提供了栈
//
//1.empty() 检测栈是否为空
//2.peek() 查看栈顶对象,但是不从栈内移除
//3.pop() 查看栈顶对象,并从栈顶移除
//4.push() 数据压栈
//5.search() 返回对象在栈中的位置
Stack<Integer> stack = new Stack();
System.out.println("检测栈是否为空 = " + stack.empty());
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println("检测栈是否为空 = " + stack.empty());
System.out.println(stack.peek());
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.search(1));
System.out.println(stack.search(4));
}
}
java提供好的队列。
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class StackTest {
public static void main(String[] args) {
//java开发人员给我们提供了队列
//LinkedList ----- 链表 -----实现了队列的接口 ---》 接口当中有的是方法的定义 ----》实现接口就实现了接口当中的所有方法
Queue<String> queue = new LinkedList<>();
//offer 、 add() ----> 相对列当中添加数据;add() 在方法存储失败的时候直接抛出异常,offer()在存储失败的时候直接返回false;
//poll、remove ----》数据的删除,remove()在删除失败的时候会抛出异常,poll()在删除失败的时候返回null
//peek()、element() ----> 查看队列的头部元素;element()在查找失败的时候会抛出异常,peek()在查找失败的时候会返回null
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer("e");
queue.offer("f");
for(String q: queue) {
System.out.println(q);
}
System.out.println("-------------");
queue.poll();//删除一个元素
for(String q: queue) {
System.out.println(q);
}
System.out.println("-------------");
//System.out.println(queue.peek());
queue.peek();
for(String q: queue) {
System.out.println(q);
}
}
}
调用poll 先进先出,移除a
调用peek。