标签:方法 定义类 序列 队列 his 冲突 方向 测试 9.1
数据结构:数据用什么样的方式组合在一起。
数据存储的常用结构有:栈、队列、数组、链表和红黑树。
简单来说:采用该结构的集合,对元素的存取有如下的特点。
当开枪的时候,先弹出上面的子弹,然后才弹出下面的子弹。
这里需要理解两个名词:
public class MyStack { private int[] array; private int size; private int top; public MyStack(int size){ this.size = size; array = new int[size]; top = -1; } //压栈 public void push(int value){ if(top < size-1){ array[++top] = value; } } //弹栈 public int pop(){ return array[top--]; } //获取栈顶数据 public int getTop(){ return array[top]; } //判断栈是否为空 public boolean isEmpty(){ return (top == -1); } //判断栈是否满了 public boolean isFull(){ return (top == size-1); } }
代码测试:
public class Test { public static void main(String[] args) { MyStack stack = new MyStack(3); stack.push(3); stack.push(2); stack.push(1); System.out.println(stack.getTop()); while(!stack.isEmpty()){ System.out.println(stack.pop()); } } }
结果:
我们
红黑树可以通过红色节点和黑色节点尽可能的保证二叉树的平衡,从而来提高效率。
什么是哈希表?
在JDK1.8之前,哈希表底层采用数组+链表实现,即使用数组处理冲突,同意hash值的链表都存储在一个数组内。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。
简单的来说,哈希表是由数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,如下图所示。
为了方便理解可以结合一个存储流程图来说明一下:
// 创建自定义学生类 public class Student { private int age; private String name; private double score; public Student() { } public Student(int age, String name, double score) { this.age = age; this.name = name; this.score = score; } // 重写equal和hashCode方法, @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Student)) return false; Student student = (Student) o; return getAge() == student.getAge() && Double.compare(student.getScore(), getScore()) == 0 && Objects.equals(getName(), student.getName()); } @Override public int hashCode() { return Objects.hash(getAge(), getName(), getScore()); } // 重写toString方法 @Override public String toString() { return "Student{" + "age=" + age + ", name=‘" + name + ‘\‘‘ + ", score=" + score + ‘}‘+"\n"; } // get, set 方法省略。
创建测试类:
public class Demo15 { public static void main(String[] args) { // 创建HashSet集合,接收自定义类型数据。 HashSet<Student> hs = new HashSet<>(); Student s1 = new Student(19,"王小石",99.2); Student s2 = new Student(20,"雷纯",99.4); Student s6 = new Student(23,"戚少商",99.8); Student s3 = new Student(21,"温柔",99.6); Student s4 = new Student(22,"白愁飞",99.1); Student s5 = new Student(23,"戚少商",99.8); // 将数据添加到HashSet集合当中。 hs.add(s1); hs.add(s2); hs.add(s3); hs.add(s4); hs.add(s5); hs.add(s6); System.out.println(hs);
结果:
标签:方法 定义类 序列 队列 his 冲突 方向 测试 9.1
原文地址:https://www.cnblogs.com/XJP-now/p/10367622.html