数据结构

栈:先进后出

Java 先进先出队列 java先进先出数据结构_数据结构

队列:先进先出

Java 先进先出队列 java先进先出数据结构_数组_02

数组:查询快,增删慢

查询快:数组中的元素地址是连续的

增删慢:数组长度固定,想要增删元素就要创建一个新的数组将源数组里的内容重新复制过去,新的数组里有想要增或删的元素,原来的变量指向新数组,源数组被销毁

链表:查询慢,增删快

查询慢:地址是不连续的,每次查询都要重头来过

增删快:地址是不连续的,增删对整体结构并不影响

Java 先进先出队列 java先进先出数据结构_java_03

单向链表:链表中只有一条链,不能保证元素的顺序(存储元素与取出元素顺序可能不一样)

双向链表:两条链,一条记录元素顺序(有序)

红黑树:接近平衡树,查询快,查询叶子节点最大次数和最小次数不能超过2倍

list集合(有序)

接口 list<E>有索引,允许有存储重复的元素

方法:

public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。

public E get(int index):返回集合中指定位置的元素。

public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。

public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

实现类

ArrayList集合=>底层数组结构,查询快,增删慢

实现不同步,则是多线程

LinkedList集合=>链表结构  (含有大量操作首位元素的方法)

public void addFirst(E e):将指定元素插入此列表的开头

public void addLast(E e):将指定元素添加到此列表的结尾

public E getFirst():返回此列表的第一个元素

public E getLast():返回此列表的最后一个元素

public E removeFirst():移除并返回此列表的第一个元素

public E removeLast():移除并返回此列表的最后一个元素

public E pop():从此列表所表示的堆栈处弹出一个元素

public void push(E e):将元素推入此列表所表示的堆栈

public boolean isEmpty()`:如果列表不包含元素,则返回true

set接口

特点:不存储重复的元素,无索引,不可用普通的for循环

哈希表(Hashset集合)

特点:无索引,无序,不同步,底层哈希表结构(查询快)

哈希值:一个十进制的整数(对象地址值逻辑地址)模拟出来的

int hashCode()   返回该对象的哈希码值(Object类的一个方法)

Java 先进先出队列 java先进先出数据结构_Java 先进先出队列_04

set集合

不允许重复元素的原理:add时,使用hashCode方法和equal()方法

HashCode存储自定义类型,必须重写hashCode方法和equal()方法

LinkedHashSet集合:底层:哈希表+链表(记录袁旭存储顺序,所以有序不重复)

可变参数:当方法的参数列表数据类型确定,可参数个数不确定

另:

  1. 一个方法的参数列表只能由一个可变参数
  2. 方法参数有多个,可变参数则放在参数列表末尾

格式:(定义方法的时候使用)

       修饰符 返回值类型 方法名(数据类型...变量名){}

底层:数组