1、 数组中元素存放位置存在的问题:
在一般数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,因此,在数组中查找特定位置的时,需要把查找的值和一系列元素进行比较。
导致的结果:
由于这列查找方法建立在“比较”的基础之上,查找的效率以来与查找过程中所进行的比较的次数。
2、哈希表的由来:
如果数组元素的值value和它在数组中的索引index有一个确定的对应关系hash(value):
index = hash(value);
那么对于给定的值,只要调用以上的hash(value)方法,就能找到数组中取值为value的元素的位置。如果数组中的元素的值和位置存在确定的对应关系,这样的数组成为哈希表。
这种数组的优点:能够提高查找数据的效率。
3、哈希码:hash()方法的返回值也称为元素的哈希码。
4、哈希冲突:多个元素具有相同的哈希码的情况,称为hash冲突。
5、为什么不能直接把哈希码作为元素的位置?
为了解决hash冲突,保证每个元素具有不同的位置。
-
数组知识点回顾之数组使用类:Arrays()在java.util包中,有一个用于操纵数组的使用类:java.util.Arrays。它提供了一系列的静态方法。
- euqals():比较两个数组是否相同,只有当两个数组的元素数目相同,对应位置上的元素相同的时候(元素的类型和内容相同),才表明数组相同。
- 代码:
-
package fifthsection;
import java.util.Arrays;
public class TestClassArrays {
public static void main(String[] args) {
//Arrays类比较两个数组是否相同
//数据类型
int[] a = new int[]{1,2,3};
int[] b = new int[]{1,2,3};
System.out.println("数组a是否等于数组b: "+Arrays.equals(a, b));
System.out.println("----------------------------------");
//对象类型
String str1 = new String("魏东");
String str2 = new String("魏东");
String[] str11 = new String[1];
String[] str22 = new String[1];
str11[0] = str1;
str22[0] = str2;
System.out.println("数组str11是否等于数组str22: "+Arrays.equals(str11, str22));
/*
* 结论:
* 对于实用数组类Arrays的比较两个数组是否相同,1、只要两个数组中的元素的数目相同,
* 2、对应位置上的元素相同(对应位置上的元素的类型和内容相同)
*/
}
}
- sort():把数组中的元素按升序排序。如果数组中的元素为引用类型,则会采用自然排序方式。
- binarySerach():按二叉查找算法,查找数组中值与给定数据相同的元素的位置(如果一个数组中有多个相同元素时,那么返回这个元素最后一个出现的索引)。返回int类型的数据;在调用这个方法的时候必须保证数组中的元素已经按照升序排列,这样才能得到正确的结果。
- toString():返回包含数组中所有元素信息的字符串。
- fill(xx类型数组,变量值):把xx类型数组中的所有元素的值设置为变量值。
- 代码:
-
package fifthsection;
import java.util.Arrays;
/*
* 演示了Arrays类的用法
*/
public class ArraysTester {
//用Arrays类操纵字符串数组
public void testStringArray() {
String[] str1 = new String[]{"Tom1","Jack","Mike","Marry","Tom2"};
String[] str2 = new String[]{"Tom1","Jack","Mike","Marry","Tom2"};
System.out.println("str1是否和str2相等:"+Arrays.equals(str1, str2));
Arrays.sort(str1);
System.out.println("排序后str1是否和str2相等:"+Arrays.equals(str1, str2));
System.out.println("Jack在str1数组中的位置:"+Arrays.binarySearch(str1, "Jack"));
System.out.println("Jack在str2数组中的位置:"+Arrays.binarySearch(str2, "Jack"));
System.out.println("str1:"+Arrays.toString(str1));
System.out.println("str2:"+Arrays.toString(str2));
}
//用Arrays类操纵int类型的数组
public void testIntArray() {
int[] a1 = new int[5],a2 = new int[5],a3 = {4,5,6,3,9,4,4};
Arrays.fill(a1, 100);
/*
* 把a1数组中的内容拷贝到a2数组中
*/
System.arraycopy(a1, 0, a2, 0, a1.length);
System.out.println("a1是否和a2相等:"+Arrays.equals(a1, a2));
Arrays.sort(a3);
System.out.println("5在数组a3中的位置:"+Arrays.binarySearch(a3, 5));
System.out.println("4在数组a3中的位置:"+Arrays.binarySearch(a3, 4));
System.out.println("数组a1:"+Arrays.toString(a1));
System.out.println("数组a2:"+Arrays.toString(a2));
System.out.println("数组a3:"+Arrays.toString(a3));
}
//main()入口
public static void main(String[] args) {
ArraysTester at = new ArraysTester();
at.testStringArray();
at.testIntArray();
}
}
- System类的arraycopy()静态方法有如下定义:
- arraycopy(Object src,int src_postion,Object dst,int dst_postion,int length)
- 以上src指定源数组,参数src_postion指定从远数组中开始拷贝的位置,参数dst指定目标数组,参数dst_postion指定向目标数组中拷贝的起始位置,参数length指定所要拷贝的元素的数目。
- 以上知识点在上一个代码中应用
分享到:
相关推荐
内容概要: - 涵盖了Vue的基础知识点,如指令、方法、计算属性等 - 列出了常用的指令语法,如v-...这是一份针对Vue基础知识点的速查手册,可以帮助初学者快速回顾和掌握Vue的基础语法,也可供开发者面试前进行知识点整理。
资源介绍: 内容概要: 这份资源是关于C语言的全面知识点总结,涵盖了C语言编程的...3. 实践编程:在实际编程项目中遇到特定问题时,可以通过查阅此资源快速回顾相应知识点,提升编程实践技能,如正确使用二维数组。
通过最近学习,越来越感觉JavaScript的强大与魅力之处,仅数组一个知识点就让我这样的初学者折腾了很久。折腾是折腾,但还是很有效果的,这几天的学习到的一些基本知识,就在自己的业务就用到了。顿感自信心爆棚,我...
内容概要 本C语言教程旨在为学习者提供一个全面而详细的学习...IT专业人士:希望回顾或深入理解C语言的高级特性。 使用场景及目标 基础知识掌握:适合初学者建立扎实的C语言基础。 深入理解:适合有一定基础的学习者深
最近为了换工作,准备下面试,开始回顾复习JavaScript相关的知识,昨天下午想到了数组去重的相关方法,干脆整理出几篇JavaScript算法文章,以备后用,此系列文章不定篇数,不定时间,想到哪写到哪,不保证正确性,不...
07_C语言中的const知识点总结 08_指针的输入和输出模型 09_课堂答疑_指针所指向内存释放 10_二级指针做输入_第1种内存模型 11_二级指针做输入_第2种内存模型 12_二级指针做输入_第2种内存模型_课堂答疑_多维数组名...
首先一点就是不要怕,别把这些东西看得很难,数组会定义吧?结构体会定义吧?单向链表会使用么?一个知识点一个知识点的去回顾,不懂就看书或者问,一步一步来,慢慢地你就会写了。
其中就包括那些被遗忘的链表知识,而它又是C语言中非常重要一个知识点.同时发现很多同学都会忘记该知识,所以通过这篇文章一方面帮助大家回忆链表知识,同时对刚接触C语言的同学也有帮助.我采用问答的方式回顾那些知识,...
然后大概回顾一下父子传值的过程: 根据上述信息可知,如果两个组件需要传递值那么需要这两个组件之间是父子关系才能传递数据。 那么如果有这样一个组件,既可以帮你传递数据,又可以帮你接收数据该多好啊? 于是乎...
四、相关知识点 :・针对各个任务分析阶段得到的知识和技能,并结合本章知识和技能目标对相关知识点进行详细讲解和说明; 五、任务实施 :・该阶段以完成各个任务为目的,教师利用相关知识和技能以演示的方式为学生...
许多知识点的阐述都是其他资料中所没有的,弥足珍贵。 涵盖C99标准 “本书是Summit以及C FAQ在线列表的许多参与者多年心血的结晶,是C语言界最为珍贵的财富之一。我向所有C语言程序员推荐本书。”. ——...
Django知识点整理 作业 第19周 今日内容概要 上课内容概要 今日Django工程的创建 Django获取多个数据以及文件上传 Django的CBV和FBV Django模板语言循环字典 Django基于正则表达式的URL Django对应的路由名称 ...
6.2.3 使用点操作符的技巧 148 6.2.4 类的数组 149 6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车丰富多彩的功能 154 教学视频:2小时55分钟 7.1 方法:让汽车动开动 ...
├day26-01巩固知识点回顾与总结.mp4 ├day26-02 匿名信号量的互斥.mp4 ├day26-03 线程id 线程比较.mp4 ├day27-01 线程的执行顺序 资源共享.mp4 ├day27-02 线程资源回收 线程变量创建 线程属性.mp4 ├day27-03 ...
16.5.3 邻接数组 16.6 加权图的描述 16.7 类实现 16.7.1 不同的类 16.7.2 邻接矩阵类 16.7.3 扩充chain类 16.7.4 链表类 16.8 图的遍历 16.8.1 广度优先搜索 16.8.2 广度优先搜索的实现 16.8.3 方法graph::bfs的...
许多知识点的阐述都是其他资料中所没有的,弥足珍贵。 涵盖C99标准 目录 ~第1章 声明和初始化 1 基本类型 1 1.1 我该如何决定使用哪种整数类型? 1 1.2 为什么不精确定义标准类型的大小? 2 1.3 因为...
6.2.3 使用点操作符的技巧 148 6.2.4 类的数组 149 6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车丰富多彩的功能 154 教学视频:2小时55分钟 7.1 方法:让汽车动开动 ...