队列 先进先出 LinkedList 添加方法 addLast();表示向队列里添加对象;getFirst();获取方法从队列里获取对象;队列数据结构为先进先出,也可用动态数组实现队列的结构;例如定义一个动态数组,向里面添加对象,然后再从里面取对象,
栈 后进先出 Stack;存数据(压栈)push();向栈里面添加对象; 取数据(弹栈) pop();从栈里面取出对象
栈也可用动态数组来实现栈的后进先出的数据结构
例如
package stack;
import java.util.Stack;
public class MyStacks {
Stack<Student>students=new Stack<Student>();//定义了一个栈的数据存储空间
public void add(){
Student stuA=new Student("赵三");//实例化几个学生对象
Student stuB=new Student("钱二");
Student stuC=new Student("孙四");
Student stuD=new Student("李五");
students.push(stuA);//向栈里面添加对象使用压栈push()方法****
students.push(stuB);
students.push(stuC);
students.push(stuD);
}
public Student find(){
Student stu=students.pop();//从栈里面取出对象弹栈;使用pop方法
return stu;
}
}
package stack;
public class Text {
public static void main(String args[]){
MyStacks demo=new MyStacks();
demo.add();
Student stu=demo.find();//定义一个类接受返回值的类
System.out.println("从栈里面取出的数据为"+stu.name);
}
}
//结果是 从栈里面取出的数据为李五
后进先出数据结构,李五为最后添加进栈的对象,所以弹栈取出的第一个是李五
也可用动态数组实现栈的数据结构,依次存取对象,但是从最后一个取,实现后进先出结构
package stack;
import java.util.ArrayList;
public class MyStack {
public ArrayList<Student> students = new ArrayList<Student>();//定义了以个动态数组用来存储学生对象
public void dopush() {
Student stuA=new Student("赵三");//实例化学生对象
Student stuB=new Student("钱二");
Student stuC=new Student("孙四");
Student stuD=new Student("李五");
students.add(stuA);//动态数组添加对象使用add()方法
students.add(stuB);
students.add(stuC);
students.add(stuD);
}
public Student dopop() {
Student stu = null;
System.out.println("students数组大小为" + students.size());
stu = students.get(students.size() - 1);//从数组的最后一个下标取元素,数组取元素使用get()方法,
//size为数组大小,-1是因为数组下标从0开始
return stu;
}
}
package stack;
public class Demo {
public static void main(String args[]){
MyStack mystack=new MyStack();
mystack.dopush();
Student stu1=mystack.dopop();
System.out.println(stu1.name);
}
}
哈希表
哈希表在存储对象的时候会给对象一个key ,钥匙,查找的时候可以输入key直接查找,不用再遍历数组
package hashmap;
import java.util.HashMap;
import java.util.Scanner;
public class Demo1 {
HashMap<String, Student> hash = new HashMap<String, Student>();//定义了一个哈希表存储数据
public void add() {//添加方法
Student stuA = new Student("张三");
Student stuB = new Student("李四");
Student stuC = new Student("王五");
Student stuD = new Student("赵六");
Student stuE = new Student("赵七");
hash.put("张三", stuA);//向哈希表存储对象的时候,前面就给它定义了一个key
hash.put("李四", stuB);
hash.put("王五", stuC);
hash.put("赵六", stuD);
//hash.put(null, stuE);错误示范,看到它添加对象的时候需要添加什么参数;
}
public Student find() {//查找方法
System.out.println("请输入你需要查找的姓名");
Scanner sc = new Scanner(System.in);
String name = sc.next();
Student stu = hash.get(name);//通过控制台输入的名字去获取对象
if(stu==null){//如果没有获取到对象就是空,哈希表直接获取不用去比较
System.out.println("没有找到该学生");
}else{
System.out.println("姓名为" + stu.name);
}
return stu;
}
public static void main(String srgs[]) {
Demo1 demo = new Demo1();
demo.add();
Student stu = demo.find();
}
}