数据结构 List Set Collections Map - 07
数据结构:
数据存储的常用结构有:栈、队列、数组、链表和红黑树。
栈:
栈:stack, 又称堆栈。
- 先进后出。
- 栈的入口、出口的都是栈的顶端位置。
- 压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。
- 弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。
队列:
队列:queue,简称队。
- 先进先出。
- 队列的入口、出口各占一侧。
数组:
数组:Array,是有序的元素序列。
- 查找元素快:通过索引,可以快速访问指定位置的元素
- 增删元素慢
- 指定索引位置增加元素:需要创建一个新数组。
- 指定索引位置删除元素:需要创建一个新数组。
链表:
链表:linked list,由一系列结点node(链表中每一个元素称为结点)组成。
- 多个结点之间,通过地址进行连接。
- 查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素
- 增删元素快:
- 增加元素:只需要修改连接下个元素的地址即可。
- 删除元素:只需要修改连接下个元素的地址即可。
红黑树:
二叉树:binary tree ,是每个结点不超过2的有序树(tree)
红黑树的约束:
- 节点可以是红色的或者黑色的
- 根节点是黑色的
- 叶子节点(特指空节点)是黑色的
- 每个红色节点的子节点都是黑色的
- 任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同
红黑树的特点:
速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍
List:
List接口特点:
- 它是一个元素存取有序的集合。
- 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素。
- 集合中可以有重复的元素,
常用方法:
- 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集合:
java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,
LinkedList集合:
java.util.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:
Set集合有多个子类,其中的java.util.HashSet、java.util.LinkedHashSet这两个集合,常用.
HashSet集合介绍:
java.util.HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。
HashSet集合存储数据的结构(哈希表)哈希表是由数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的.
保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。
LinkedHashSet
java.util.LinkedHashSet,它是链表和哈希表组合的一个数据存储结构。
可变参数:
Collections:
- java.utils.Collections 是集合工具类,用来对集合进行操作。部分方法如下:
- public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素。
- public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。
- public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。
- public static <T> void sort(List<T> list,Comparator<? super T> ):将集合中元素按照指定规则排序。
测试:
Map:
java.util.Map接口,存放这种对象关系的对象.IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。
- HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。
- LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。需要重写键的hashCode()方法、equals()方法。
常见方法:
- public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。
- public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
- public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
- boolean containsKey(Object key) 判断集合中是否包含指定的键。
- public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。
- public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。
遍历:
HashMap存储自定义类型键值
LinkedHashMap
例子: