当前位置: 首页 > news >正文

网页设计网站世界杯怎样做自己的个人网站

网页设计网站世界杯,怎样做自己的个人网站,dede网站模板 音响,企业展厅的作用62-Java-面试专题(1)__基础-- 笔记 笔记内容来源与黑马程序员教学视频 文章目录 62-Java-面试专题(1)__基础-- 笔记Java-面试专题(1)笔记中涉及资源#xff1a; 一、二分查找①#xff1a;代码实现1. 流程2. 代码实现3. 测试 ②#xff1a;解决整数溢出#xff08;方法一 一、二分查找①代码实现1. 流程2. 代码实现3. 测试 ②解决整数溢出方法一③解决整数溢出方法二③选择题目④注意事项 二、冒泡排序①初步实现②减少冒泡次数③进一步优化④总结 三、选择排序①代码实现②总结 四、插入排序①代码实现②总结③插入和选择推到某一论排序结果 五、快速排序①文字描述②单边循环③双边循环1. 代码实现2. 注意事项 ④特点 六、ArrayList扩容规则七、Iterator_FailFast_FailSafe八、LinkedList九、HashMap Java-面试专题(1) 笔记中涉及资源 一、二分查找 ①代码实现 1. 流程 前提有已排序数组A假设已经做好) 定义左边界L、右边界R,确定搜索范围循环执行二分查找(3、4两步) 获取中间索引MFloor(LR)/2) 中间索引的值A[M]与待搜索的值T进行比较 ① A[M]T表示找到返回中间索引② A[MT,中间值右侧的其它元素都大于T,无需比较中间索引左边去找M-1设置为右边界重新查找③ A[M]T,中间值左侧的其它元素都小于T,无需比较中间索引右边去找M1设置为左边界重新查找 当LR时表示没有找到应结束循环 2. 代码实现 /*** 数据准备初始化一个排好序的数组*/public static int[] initArray(){Random random new Random();// 创建一个数组长度在10-20之间int len random.nextInt(10) 10;int[] array new int[len];// 遍历添加数据for (int i 0; i array.length; i) {array[i] random.nextInt(100);}// 排序Arrays.sort(array);return array;}/*** 二分查找代码实现*/public static void testBinarySearch() {int[] array initArray();System.out.println(Arrays.toString(array));System.out.println(请输入您要查找的数据);int number scanner.nextInt();// 初始化 开头 结尾 中间的下标int start 0, end array.length -1, middle;while (start end) {middle (start end) 1;if (array[middle] number){System.out.println(您要查找的数字下标为 middle);return;}else if (array[middle] number){end middle - 1;}else {start middle 1;}}System.err.println(您要查找的数字不存在);}public static void main(String[] args) {testBinarySearch();}3. 测试 ②解决整数溢出方法一 ③解决整数溢出方法二 ③选择题目 1.有一个有序表为1,5,8,11,19,22,31,35,40,45,48,49,50当二分查找值为48的结点时查找成功需要比较的次数 4次奇数二分取中间 偶数二分取中间靠左 2.使用二分法在序列1,4,6,7,15,33,39,50,64,78,75,81,89,96中查找元素81时需要经过)次比较 4次3.在已经的128个数组中二分查找一个数需要比较的次数最多不超过多少次 7次2n128或128/2/2…直到1问题转化log^2 128,如果手边有计算器用log10 128/log10 2 是整数则该整数即为最终结果是小数则舍去小数部分整数加一为最终结果 ④注意事项 1.目前介绍的二分查找是以jdk中Arrays.binarySearch的实现作为讲解示范后续选择题的解答思路也是以此为准2.但实际上二分查找有诸多变体一旦使用变体的实现代码则左右边界的选取会有变化进而会影响之前选择题的答案选择 二、冒泡排序 ①初步实现 /*** 数据准备初始化一个数组*/public static int[] initArray(){Random random new Random();// 创建一个数组长度在10-20之间int len random.nextInt(10) 5;int[] array new int[len];// 遍历添加数据for (int i 0; i array.length; i) {array[i] random.nextInt(100);}return array;}public static void main(String[] args) {// 调用方法获取一个无序的数组int[] array initArray();System.out.println(排序前 : Arrays.toString(array));for (int i 0; i array.length -1; i) {for (int j 0; j array.length - 1 - i; j) {if (array[j] array[j 1]){array[j 1] array[j 1] array[j];array[j] array[j 1] - array[j];array[j 1] array[j 1] - array[j];}}}System.out.println(排序后 : Arrays.toString(array));}②减少冒泡次数 /*** 数据准备初始化一个数组*/public static int[] initArray(){Random random new Random();// 创建一个数组长度在10-20之间int len random.nextInt(10) 5;int[] array new int[len];// 遍历添加数据for (int i 0; i array.length; i) {array[i] random.nextInt(100);}return array;}public static void main(String[] args) {// 调用方法获取一个无序的数组int[] array initArray();System.out.println(排序前 : Arrays.toString(array));for (int i 0; i array.length -1; i) {// 是否发生交换boolean swapped false;for (int j 0; j array.length - 1 - i; j) {System.out.println(比较次数 j);if (array[j] array[j 1]){array[j 1] array[j 1] array[j];array[j] array[j 1] - array[j];array[j 1] array[j 1] - array[j];swapped true;}}if (!swapped) {break;}System.out.println(第 (i1) 排序 : Arrays.toString(array));}}③进一步优化 /*** 数据准备初始化一个数组*/public static int[] initArray(){Random random new Random();// 创建一个数组长度在10-20之间int len random.nextInt(10) 5;int[] array new int[len];// 遍历添加数据for (int i 0; i array.length; i) {array[i] random.nextInt(100);}return array;}public static void main(String[] args) {// 调用方法获取一个无序的数组int[] array initArray();int n array.length - 1;System.out.println(排序前 : Arrays.toString(array));for (int i 0; i n; i) {int last 0;for (int j 0; j n; j) {System.out.println(比较次数 j);if (array[j] array[j 1]){array[j 1] array[j 1] array[j];array[j] array[j 1] - array[j];array[j 1] array[j 1] - array[j];last j;}}n last;System.out.println(第 (i1) 排序 : Arrays.toString(array));}}④总结 文字描述 (以升序为例) 1.依次比较数组中相邻两个元素大小若[a]a[1],则交换两个元素两两都比较一遍称为一轮冒泡结果是让最大的元素排至最后2.重复以上步骤直到整个数组有序 优化方式 每轮冒泡时最后一次交换索引可以作为下一轮冒泡的比较次数如果这个值为零表示整个数组有序直接退出外层循环即可 三、选择排序 ①代码实现 /*** 数据准备初始化一个数组*/public static int[] initArray(){Random random new Random();// 创建一个数组长度在10-20之间int len random.nextInt(10) 5;int[] array new int[len];// 遍历添加数据for (int i 0; i array.length; i) {array[i] random.nextInt(100);}return array;}public static void main(String[] args) {int[] array initArray();System.out.println(排序前 : Arrays.toString(array));for (int i 0; i array.length - 1; i) {// 每轮最小值对应的下标int minIndex i;for (int j i 1; j array.length; j) {if (array[minIndex] array[j]){minIndex j;}}if (minIndex ! i) {array[i] array[minIndex] array[i];array[minIndex] array[i] - array[minIndex];array[i] array[i] - array[minIndex];}System.out.println(第 (i1) 次排序 : Arrays.toString(array));}}②总结 文字描述以升序为例 1.将数组分为两个子集排序的和未排序的每一轮从未排序的子集中选出最小的元素放入排序子集2.重复以上步骤直到整个数组有序 优化方式 1.为减少交换次数每一轮可以先找最小的索引在每轮最后再交换元素 与冒泡排序比较 1.二者平均时间复杂度都是0(n2)2.选择排序一般要快于冒泡因为其交换次数少3.但如果集合有序度高冒泡优于选择4.冒泡属于稳定排序算法而选择属于不稳定排序 四、插入排序 ①代码实现 /*** 数据准备初始化一个数组*/public static int[] initArray(){Random random new Random();// 创建一个数组长度在10-20之间int len random.nextInt(10) 5;int[] array new int[len];// 遍历添加数据for (int i 0; i array.length; i) {array[i] random.nextInt(100);}return array;}public static void main(String[] args) {int[] array initArray();System.out.println(排序前 : Arrays.toString(array));for (int i 1; i array.length; i) {// 假设最小值int minNum array[i];int j i-1;while (j 0) {if (minNum array[j]) {array[j 1] array[j];}else {break;}j--;}array[j 1] minNum;System.out.println(第 (i) 次排序 : Arrays.toString(array));}}②总结 文字描述以升序为例 1.将数组分为两个区域排序区域和未排序区域每一轮从未排序区域中取出第一个元素插入到排序区域需保证顺序)2.重复以上步骤直到整个数组有序 优化方式1.待插入元素进行比较时遇到比自己小的元素就代表找到了插入位置无需进行后续比较2.插入时可以直接移动元素而不是交换元素 与选择排序比较1.二者平均时间复杂度都是0(n2)2.大部分情况下插入都略优于选择3.有序集合插入的时间复杂度为O(m)公4.插入属于稳定排序算法而选择属于不稳定排序 ③插入和选择推到某一论排序结果 1. 使用直接插入排序算法对序列18,23,19,9,23,15进行排序第三趟排序后的结果为) A.9,18,15,23,19,23 B.18,23,19,9,23,15 C.18,19,23,9,23,15 D.9,18,19,23,23,15 2. 使用直接选择排序算法对序列18,23,19,9,23,15进行排序第3趟排序后的结果为) A.9,23,19,18,23,15 B.9,15,18,19,23,23 C.18,19,23,9,23,15 D.18,19,23,9,15,23 五、快速排序 ①文字描述 每一轮排序选择一个基准点(pivot)进行分区 1.让小于基准点的元素的进入一个分区大于基准点的元素的进入另一个分区2.当分区完成时基准点元素的位置就是其最终位置 在子分区内重复以上过程直至子分区元素个数少于等于1这体现的是分而治之的思想(divide-and-conquer) ②单边循环 单边循环快排(lomuto洛穆托分区方案) 选择最右元素作为基准点元素j指针负责找到比基准点小的元素一旦找到则与ⅰ进行交换ⅰ指针维护小于基准点元素的边界也是每次交换的目标索引最后基准点与ⅰ交换ⅰ即为分区位置 /*** 数据准备初始化一个数组*/public static int[] initArray(){Random random new Random();// 创建一个数组长度在10-20之间int len random.nextInt(10) 5;int[] array new int[len];// 遍历添加数据for (int i 0; i array.length; i) {array[i] random.nextInt(100);}return array;}/*** 选择一个基准点(pivot)进行分区* param array 排序数组* param l 左边界* param pivot 基准点* return 返回值 分区后中间索引值*/public static int partition(int[] array, int l, int pivot){// 右侧基准点(值)int pivotNum array[pivot];int i l;for (int j l; j pivot; j) {if (array[j] pivotNum) {if (i ! j){swap(array, i, j);}i ;}}if (i ! pivot){swap(array, i, pivot);}return i;}/*** 交换位置* param array 数组* param i 位置1* param j 位置2*/private static void swap(int[] array, int i, int j) {int temp array[j];array[j] array[i];array[i] temp;}/*** 递归排序* param array 排序数组* param l 左边界* param pivot 基准点*/public static void quick(int[] array, int l, int pivot){if (l pivot){return;}int index partition(array, l, pivot);quick(array,l, index -1);quick(array,index 1,pivot);}public static void main(String[] args) {int[] array initArray();System.out.println(排序前 : Arrays.toString(array));quick(array, 0, array.length - 1);System.out.println(排序后 : Arrays.toString(array));}③双边循环 双边循环快排并不完全等价于hoare霍尔分区方案 选择最左元素作为基准点元素j指针负责从右向左找比基准点小的元素ⅰ指针负责从左向右 找比基准点大的元素一旦找到二者交换直至ⅰj相交最后基准点与ⅰ此时ⅰ与j相等)交换ⅰ即为分区位置 1. 代码实现 /*** 数据准备初始化一个数组*/public static int[] initArray(){Random random new Random();// 创建一个数组长度在10-20之间int len random.nextInt(10) 5;int[] array new int[len];// 遍历添加数据for (int i 0; i array.length; i) {array[i] random.nextInt(100);}return array;}/*** 选择一个基准点(pivot)进行分区* param array 排序数组* param l 左边界* param r 右边界* return 返回值 分区后中间索引值*/public static int partition(int[] array, int l, int r){// 左侧基准点(值)int pivotNum array[l];int i l;int j r;while (i j) {// j从右边找比基准点小的值while (i j array[j] pivotNum){j--;}// i 从左边找比基准点大的值while (i j array[i] pivotNum){i;}swap(array, i, j);}swap(array, i, l);return i;}/*** 交换位置* param array 数组* param i 位置1* param j 位置2*/private static void swap(int[] array, int i, int j) {int temp array[j];array[j] array[i];array[i] temp;}/*** 递归排序* param array 排序数组* param l 左边界* param pivot 基准点*/public static void quick(int[] array, int l, int pivot){if (l pivot){return;}int index partition(array, l, pivot);quick(array,l, index -1);quick(array,index 1,pivot);}public static void main(String[] args) {int[] array initArray();System.out.println(排序前 : Arrays.toString(array));quick(array, 0, array.length - 1);System.out.println(排序后 : Arrays.toString(array));}2. 注意事项 1.基准点在左边并且要先 j 后 i 先从右边找在从左边找 2.while ( i j array[ j ] pivotNum) // j从右边找比基准点小的值 while (i j array[j] pivotNum){j--; }3.while (i j array[i] pivotNum) // i 从左边找比基准点大的值 while (i j array[i] pivotNum){i; }④特点 附绿 洛穆托vs霍尔 https:/qastack.cn/cs/11458/quicksort-partitioning-hoare-Vs-lomuto 六、ArrayList扩容规则 可以看看这位博主的https://www.cnblogs.com/ruoli-0/p/13714389.html ArrayList()会使用长度为零的数组 直接调用无参方法初始容量为0空数组 ArrayList(int initialCapacity)会使用指定容量的数组 调用有参方法数组容量为传入的容量值 public ArrayList(Collection?extends Ec)会使用c的大小作为数组容量 传入的是一个集合使用的是集合的大小 add(0 bject o)首次扩容为10再次扩容为上次容量的1.5倍addAll(Collection c)没有元素时扩容为Math.max(10,实际元素个数)有元素时为Math.max(原容量1.5倍实际元素个数) 如过集合中没有元素 扩容会在10和实际元素个数中选择一个大的有元素时扩容会在(原容量1.5倍和实际元素个数)选择一个大的 ArrayList的特点 1.ArrayList的底层数据结构是数组所以查找遍历快增删慢。 2.ArrayList可随着元素的增长而自动扩容正常扩容的话每次扩容到原来的1.5倍。 3.ArrayList的线程是不安全的。 ArrayList的扩容 扩容可分为两种情况 第一种情况当ArrayList的容量为0时此时添加元素的话需要扩容三种构造方法创建的ArrayList在扩容时略有不同 1.无参构造创建ArrayList后容量为0添加第一个元素后容量变为10此后若需要扩容则正常扩容。 2.传容量构造当参数为0时创建ArrayList后容量为0添加第一个元素后容量为1此时ArrayList是满的下次添加元素时需正常扩容。 3.传列表构造当列表为空时创建ArrayList后容量为0添加第一个元素后容量为1此时ArrayList是满的下次添加元素时需正常扩容。 第二种情况当ArrayList的容量大于0并且ArrayList是满的时此时添加元素的话进行正常扩容每次扩容到原来的1.5倍。 七、Iterator_FailFast_FailSafe ArrayList是fail-fast的典型代表遍历的同时不能修改尽快失败CopyOnWriteArrayList是fail-safe的典型代表遍历的同时可以修改原理是读写分离 并发篇-32-ConcurrentHashMap 八、LinkedList 九、HashMap
http://www.sczhlp.com/news/199432/

相关文章:

  • 微信公众号如何创建赞赏账户网络推广seo是什么
  • 郑州地方网络推广网站哪个网站建设服务器是在国外的
  • 东阳住房和城市建设网站调用wordpress的文章编辑器
  • 自动采集更新网站源码关于推进公司网站开发的请示
  • 长沙手机网站开发长沙企业建网站费用
  • 杭州网站改版公司广东企业网站模板定制
  • 北航网站建设用html制作网站流程
  • 百度搜索网站的图片wordpress 文章图集
  • 电商网站建设源代码提供大良网站建设
  • 男女直接做视频教学视频网站涉县做网站
  • 天津个人专业做网站深圳企业网站制作服务
  • 承德网站设计公司网站建设培训学校北京
  • 第18讲:商品模型 织梦网站系统 dedecms 教学课件wordpress 用户
  • 百度上传网站服务器个人建 行业 网站
  • 做网站用什么语言和工具网站建设公司怎样做账
  • 网站自适应手机代码北京网站建设兼职
  • wps2016怎么做网站网页设计基础知识点总结
  • 怎么新建网站东莞网站建设网站推广
  • 搭建简单的网站做网站模版与定制的区别
  • 创建wordpress网站厦门网站建站
  • 厦门专业做网站 厦门做网站的公司 厦门做服饰网站做国外网站关键词用写
  • wordpress还原回收站网页安全防护如何关闭
  • 临沂市住房和城乡建设厅网站河北地矿建设集团官方网站
  • 做网站的技巧黑山网站制作公司
  • 企业运营方案seo项目是什么
  • 网站打开速度变慢wordpress+假用户插件
  • wordpress 站内消息中国铁路建设监理协会官方网站
  • wordpress生成的网页宁波外包seo服务
  • 快钱支付需要网站备案吗嘉兴网站建设方案外包
  • dw做网站如何让用户可编辑网站添加设置着陆页