数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率 。
常见的数据结构
数据存储的常用结构有:栈、队列、数组、链表和红黑树.
栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。,元素先进后出。
压栈:就是存元素。 弹栈:就是取元素。
队列:queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。 队列的入口、出口各占一侧 ,元素先进先出。
链表:linked list,由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时i动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域 ,查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素
**数组** 查找元素快:通过索引,可以快速访问指定位置的元素 ,增删元素慢 。
红黑树
二叉树是每个节点最多有两个子树的树结构。顶上的叫根结点,两边被称作“左子树”和“右子树”。
红黑树本身就是一颗二叉查找树,将节点插入后,该树仍然是一颗二叉查找树。也就意味着,树的键值仍然是有序的。
红黑树的约束:
-
节点可以是红色的或者黑色的
-
根节点是黑色的
-
叶子节点(特指空节点)是黑色的
-
每个红色节点的子节点都是黑色的
-
任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同
红黑树的特点:
速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍
集合有ArrayList,LinkedList,HashSet,HashMap,Iterator(迭代器)。
java集合框架的三大类接口:Set, List,Map; java集合框架的三大类接口之间的区别: List接口:元素存取有序,带有索引,通过索引就可以精确的操作集合中的元素(与数组的索引是一个 道理),可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。 Set接口::存储无序(不再支持索引),不能存储重复数据 Map集合:存储数据是以键值对的形式存储
ArrayList和LinkedList的区别主要有; 1.数据结构:ArrayList是基于动态数组的数据结构,LinkedList是基于链表的数据结构; 2.访问数据:ArrayList强于LinkedList,ArrayList可以进行随机访问,而LinkedList 要移动指针,因此,在速度上,ArrayList也强于LinkedList,因为LinkedList只能用 从一头到另一头的方式进行访问; 3.增加数据和删除数据:LinkedList优于ArrayList,LinkedList只要改变元素的指针即可, 而ArrayList需要移动数据;
AArrayList与LinkedLIst的共同特点:
-
它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
-
它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
-
集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。
Set特点:存储无序(不再支持索引),不能存储重复数据 ,HashSet,通常用来输出数据的方案:Iterator实现数据的删除和遍历
HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
泛型集合
存放数据的数据类型不确定,导致使用的时候,出现类型转换格式不匹配的异常,数据不安全
泛型解决普通集合的问题:1、效率高 2、类型安全的
泛型:泛型类、泛型方法、泛型接口、泛型集合
语法:
集合<数据类型> 集合名=new 集合<数据类型>();
支持菱形语法:
集合<数据类型> 集合名=new 集合<>();
集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。
定义和使用含有泛型的类
定义格式:
修饰符 class 类名<代表泛型的变量> { }
含有泛型的方法
定义格式:
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
具有泛型的类中可以有泛型的方法,**调用方法时,确定泛型的类型**。
含有泛型的接口
定义格式:
修饰符 interface接口名<代表泛型的变量> { }
例如:
public interface MyGenericInterface<E>{
public abstract void add(E e);
public abstract E getE();
}
Collections
Arrays:操作数组。排序、查找
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> )
:将集合中元素按照指定规则排序。
BinarySearch()必须基于排序。