数据结构笔记

196 阅读4分钟

一:数据结构:

1:数据的存储一般分线性存储结构和链式存储结构两种。前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据.
    即逻辑上相连的物理位置相邻,比较常见的就是数组;后者是一种链式存储方式,不保证顺序性,逻辑上相邻的元素之间用指针所指定,它不是用一块连续的内存存储,逻辑上相连的物理位置不一定相邻。
    这就是数组和链表的区别。

   栈:先进后出
   栈是一种“后进先出”的数据结构,对栈的插入和删除操作都是在栈头位置进行的,这与在单向链表的表头插入和删除元素的原理类似,因此可以用单向链表实现栈。

   队列:先进先出
   队列是一种“先进先出”的数据结构,队列的插入操作是在队尾进行的,而删除操作是在队头进行的,这与在双端链表的表尾插入和在表头删除操作是类似的,因此可以用双端链表实现队列。

   数组:查询快:数据的地址是连续的,我们通过数组的首      地址可以找到数据,通过数组的索引可以快速查询。
        增删慢:数组的长度的是固定的,想要增加或者删除,必须创建一个新数组,把原数组的数据复制过来。
   链表:查询慢:地址不是连续的,每次查询都是从头开始     查询。
         增删快:链表结构,新增删除一个原始对链表的整体结构没有影响。

         链表中的每一个元素也成为一个节点,一个节点包含了一个数据源(存储数组) ,两个指针(存储地址)

         [自己的地址,数据,下一个节点的地址]

         单项链表:链表中只有一条链子,不能保证元素的顺序,存储元素和取出元素的顺序可能不一致。
         无序的,删除,增加快。

         双向链表:链表中有两条链子,双向链表的每个结点既能指向下一个结点,又能指向前一个结点,双向链表既能从头结点向尾结点遍历,又能从尾结点向头结点遍历,既有一个头结点,又有一个尾结点。

二.collection

1.list:有序,可重复,有索引,查询快
   arrayList:有序可重复多线程 底层数组,查询快增删慢
   LinkedList :有序看可重复多线程底层链表,查询慢增删快
   vector:有序可重复单线程 底层数组

2.set:不重复,无索引,不能使用普通的for循环遍历。

	   不重复的原因:当两个元素的.hashCode()方法返回的哈希值相同,并且两个元素的.equals()返回true时 认为两个元素是同一个元素所以就存一个,当两个元素hashCode相同当时equals返回false是认为不是同一个元素,会存进去。

	   set集合存储元素不重复的元素前提是:存储的元素必须重写hashCode()方法和equals()方法。

       hashSet:哈希表结构查询速度快,无序,不可重复。
       		结构:哈希表=数组+链表或红黑树
       		链表是为了解决hash冲突。
       LinkedHashSet:有序,不重复
            结构:数组+链表或红黑树+链表
            有序就是多一个链表来记录数据顺序。

三.hash

  1.哈希值:是一个十进制的整数,有系统随机给出(就是对象地址,是一个逻辑地址,是模拟出来的地址,不是数据存储的物理地址)。

  2. object类的 hashcode() 方法的源码
     public nation int hashCode()

     nation:代表改方法调用的是本地操作系统的方法。

     如果不重写object的hashCode() 就调用他的方法,
     重新了hashCode()方法,可以随意返回值。

     string 类 重写了hashCode()
     String s1= new String"abc"String s1= new String"abc")
     system.out.println(s1==s2)//ture

哈希表
	jdk1.8之前  哈希表= 数组+链表
	jdk1.8会后  哈希表= 数组+链表
				哈希表= 数组+红黑树

	特点:速度快
	哈希表:数组是把相同哈希值的元素进行分组 链表/红黑树把这些哈希值相同的元素连接到一起,当链表长度大于8后把链表转换成红黑树。

collections

collections的方法
    collections.addAll()
    
    collections.sort() 排序方法

    如果是自定义类型 如 List<Student> st= new ArrayList<>();
    student 类型的
    这个student类必须重写 comparable方法定义排序规则
    排序规则:this.参数-参数 升序
    		 参数-this.参数 降序

hashMap 特点: 1.存储是无序的 2.key和value都可以为空,但是可以只能有一个空 3.key是唯一的,底层的数据结构控制的 4.jdk1.8之前的数据结构:链表+数组 jdk1.8之后:链表+数组+红黑树 5.当链表长度大于8并且长度大于64,才将链表转换为红黑树,变为红黑树的目的是为了高效的查询。