相关视频: 提取码: n9pe

1 时间复杂度

public  static void test1(int n) {//执行一条if(n>5) {System.out.println("n>5");}else if(n>3) {System.out.println("n>3");}else {System.out.println("n<=3");}//执行1(int i=0)+5(i++)+5(i<5)+5条(syso)for(int i=0;i<5;i++) {System.out.println("test"+i);}}//时间复杂度:O(n+k)public static void test2(int n,int k) {for(int i=0;i<n;i++) {System.out.println("test");}for(int i=0;i<k;i++) {System.out.println("test");}}

2 斐波那契数列

package 复杂度;public class Main {public static void main(String[] args) {System.out.println(fib(8));}public static int fib(int n) {if(n<=1){return n;}   int first = 0;int second = 1;for(int i=1;i<n;i++){int sum = first+second;first = second;second = sum;}return second;}
}

3 动态数组

  • 1 数组初始化后大小不可改变(栈中存放数组地址,指向堆(为数组开辟的空间))
  • 2 main方法结束后,销毁内部栈中数组(局部变量),指针消失。(当年轻代满以后会回收堆中没有指针指向的内容)
  • 3 this(elements) :调用类内部含有参数的构造函数
  • 4 Integer是int的包装类
  • 5 == 基本数据类型比较:值,引用数据类型比较:对象地址
  • 6 右移 >> 例如:4>>1 相当于除以2(二进制:100 ->010)
  • 7 泛型只能放对象
  • 8 为保证不同对象在数组中所占空间一致,数组里面放的是地址值。
//消除警告
@SuppressWarnings("unchecked")public class ArrayListDong<E> {/*** 元素的数量*/private int size;/*** 所有的元素*/private E[] elements;private static final int DEFAULT_CAPACITY = 10;private static final int ELEMENT_NOT_FOUND = -1;//初始化数组public ArrayListDong(int capaticy) {capaticy = (capaticy<DEFAULT_CAPACITY)?DEFAULT_CAPACITY:capaticy;//因为所有类都继承自object,所以先new Object数组,再强转elements = (E[])new Object[capaticy];}//无参数则默认大小为10public ArrayListDong() {//调用有参的构造函数!!!this(DEFAULT_CAPACITY);}/*** 清除所有元素*/public void clear() {for (int i = 0; i < size; i++) {elements[i] = null;}//不能用:elements = null; 因为会断掉数组(栈)指向堆的空间,堆内部东西会销毁,每次都需要重新开辟空间。size = 0;}/*** 元素的数量 */public int size() {return size;}/*** 是否为空*/public boolean isEmpty() {return size == 0;}/*** 是否包含某个元素*/public boolean contains(E element) {return indexOf(element)!=ELEMENT_NOT_FOUND;}/*** 添加元素到尾部*/public void add(E element) {add(size,element);}/*** 获取index位置的元素*/public E get(int index) {rangeCheck(index);return elements[index];}/*** 设置index位置的元素* @return 历史的元素*/public E set(int index,E element) {rangeCheck(index);E old = elements[index];elements[index] = element;return old;}/*** 在index位置插入一个元素*/public void add(int index,E element) {rangeCheckForAdd(index);ensureCapacity(size+1);for (int i = size-1; i >= index; i--) {elements[i+1] = elements[i];}elements[index] = element;size++;}/*** 删除index位置的元素*/public E remove(int index) {rangeCheck(index);E old =  elements[index];for (int i = index+1; i < size; i++) {elements[i-1] = elements[i];}elements[--size]=null;return old;}/*** 动态缩容*/public E removed(int index) {rangeCheck(index);E old =  elements[index];for (int i = index+1; i < size; i++) {elements[i-1] = elements[i];}elements[--size]=null;trim();return old;}/*** 裁剪数组*/private void trim() {int capacity = elements.length;//元素数量大于数组空间的一半,不缩容int newCapacity = capacity>>1;if(size>=newCapacity || capacity<=DEFAULT_CAPACITY) return;//剩余空间还很多E[] newElements = (E[])new Object[newCapacity];for (int i = 0; i < size; i++) {newElements[i] = elements[i];}//原数组指向新数组elements = newElements;System.out.println("缩容:"+capacity+"至"+newCapacity);}/*** 查看元素的位置*/public int indexOf(E element) {if(element==null) {for (int i = 0; i < size; i++) {if (elements[i] == null) {return i;}}}else {for(int i=0;i<size;i++) {if(elements[i].equals(element)) return i;}}return ELEMENT_NOT_FOUND;}/*** 数组转换成字符串*/@Overridepublic String toString() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("size=").append(size).append(",[");for (int i = 0; i < size; i++) {if(i!=0) {stringBuilder.append(",");}stringBuilder.append(elements[i]);
//          if(i!=size-1) {//              stringBuilder.append(",");
//          }}stringBuilder.append("]");return stringBuilder.toString();}//封装报错private void outOfBounds(int index) {throw new IndexOutOfBoundsException("Index"+index+",Size:"+size);}private void rangeCheck(int index) {if(index<0||index>=size) {outOfBounds(index);}}private void rangeCheckForAdd(int index) {if(index<0||index>size) {outOfBounds(index);}}/*** @Description:保证容量至少有capacity*/private void ensureCapacity(int capacity) {int oldCapacity = elements.length;if(oldCapacity>=capacity) return;//新容量为旧容量的1.5倍int newCapacity = oldCapacity+(oldCapacity>>1);E[] newElements = (E[])new Object[newCapacity];//将原数组的元素填入新数组for (int i = 0; i < size; i++) {newElements[i] = elements[i];}//原数组指向新数组elements = newElements;System.out.println("扩容:"+oldCapacity+"至"+newCapacity);}
}
public class Assert {public static void test(boolean value) {try {if(!value) throw new Exception("测试未通过");} catch (Exception e) {e.printStackTrace();}}
}
public class DongArray {public static void main(String[] args) {//正常情况下,创建数组后,数组大小无法改变
//      int arr[] = new int[]{11,22,333};
//      ArrayListDong listDong = new ArrayListDong();
//      listDong.add(99);
//      listDong.add(77);
//      listDong.add(88);
//      listDong.add(66);
//      listDong.add(55);
//      for(int i=0;i<30;i++) {//          listDong.add(i);
//      }
//      listDong.set(3, 80);ArrayListDong<Person> persons = new ArrayListDong<>();persons.add(new Person(11, "aa"));persons.add(new Person(12, "bb"));persons.add(new Person(13, "cc"));persons.add(null);persons.add(null);System.out.println(persons);System.out.println(persons.indexOf(null));
//      persons.clear();//提醒jvm进行垃圾回收
//      System.gc();
//      ArrayListDong<Integer> ints = new ArrayListDong<>();
//      ints.add(1);
//      ints.add(2);
//      ints.add(3);
//      System.out.println(ints);       }
}

public class Person {private int age;private String name;public Person(int age, String name) {this.age = age;this.name = name;}public String toString() {return "Person [age=" + age + ", name=" + name + "]";}//对象被销毁之前调用@Overrideprotected void finalize() throws Throwable {super.finalize();System.out.println("Person - finalize");}@Overridepublic boolean equals(Object obj) {Person person = (Person)obj;return this.age == person.age;}
}

数据结构与算法学习笔记01-数组相关推荐

  1. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  2. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  3. 数据结构与算法学习笔记——图 C++实现

    数据结构与算法学习笔记--图 C++实现 1 概念 2 图的表示方法 3 算法 3.1 拓扑排序 3.2 图的搜索算法 3.2.1 广度优先搜索(BFS) 3.2.2 深度优先搜索(DFS) 3.3 ...

  4. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  5. 数据结构与算法学习笔记4:递归+分治法

    数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...

  6. 数据结构与算法学习笔记之先进先出的队列

    前言 队列是一种非常实用的数据结构,类似于生活中发排队,可应用于生活,开发中各个方面,比如共享打印机(先请求先打印),消息队列.你想知道他们是怎么工作的么.那就来一起学习一下队列吧 正文 一.队列的定 ...

  7. 数据结构与算法 学习笔记(8):字典、集合、哈希表

    数据结构与算法 学习笔记(8):字典.集合.哈希表 本次文章记录的是和字典.集合.哈希表等数据结构相关的LeetCode算法题(题号与LeetCode对应),包括其构造和使用,针对每一题或一类题给出了 ...

  8. 数据结构与算法学习笔记——链栈

    数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...

  9. 数据结构与算法 学习笔记(5):字符串

    数据结构与算法 学习笔记(5)- 字符串 本次笔记记录了LeetCode中关于字符串的一些问题,并给出了相应的思路说明和代码.题目编号与LeetCode对应,方便查找. 题目1:LeetCode 13 ...

  10. 数据结构与算法学习笔记(python)——第一节 数组应用程序实战

    前言 本人是一个长期的数据分析爱好者,最近半年的时间的在网上学习了很多关于python.数据分析.数据挖掘以及项目管理相关的课程和知识,但是在学习的过程中,过于追求课程数量的增长,长时间关注于学习了多 ...

最新文章

  1. python【力扣LeetCode算法题库】35- 搜索插入位置
  2. 安装modelsim
  3. 重构一个功能块的总结
  4. 【机器学习】盘点Kaggle中常见的AutoML工具库及用法
  5. NES模拟器开发-PPU笔记
  6. Vue项目中使用Echarts(一)
  7. 阿里云服务器上安装mysql的详细步骤
  8. 102 模拟ssh远程执行命令
  9. 千里达v1000时速_重新定义性价比 千里达V1000碳架山地车 评测
  10. 神经网络反向传播(BP)算法推导
  11. Win10环境下VMware安装Mac OS虚拟机并在虚拟机中安装xcode
  12. 没有他的帅气,也要像他那般努力!(转载)
  13. 【热点资讯】哪所英国大学最适合你?
  14. 网络安全与网站安全及计算机安全:如何使用Kali Linux的Rarcrack获取RAR压缩文件加密密码?
  15. 利用51单片机,矩阵键盘按键显示0--F在数码管
  16. Kindle如何带封面传书
  17. Artifact xxx:war exploded: Error during artifact deployment.
  18. 计算机碎片整理,如何对计算机进行碎片整理
  19. 【论文阅读笔记】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  20. C语言应用笔记(一):运算符优先级和使用问题

热门文章

  1. 解决VMWare虚拟机IP变成127.0.0.1和选择固定IP段
  2. linux kernel下输入输出console如何实现
  3. 如何使用损坏或删除SQL Server事务日志文件重建数据库
  4. 学习PowerShell和SQL Server –简介
  5. sql机器学习服务_机器学习服务–在SQL Server中配置R服务
  6. 用SQL Server 2017图形数据库替换数据仓库中的桥表
  7. 使用Spark分析拉勾网招聘信息(四): 几个常用的脚本与图片分析结果
  8. [IDEA] 快捷键学习
  9. UDK游戏开发基础命令
  10. Animator忽视TimeScale