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指定所要拷贝的元素的数目。
- 以上知识点在上一个代码中应用
分享到:
相关推荐
三、单点修改 对于树状数组C,如果我们想修改原数组A中的某个元素A[i],可以使用"线性更新"操作。这个操作涉及到从i到i+2^k-1的所有节点(其中k是使得2^k 的最小整数),更新C[i]为新值,然后递归地更新所有父节点...
JavaScript知识点回顾 JavaScript是一种广泛应用于Web开发的脚本语言,主要在客户端运行,与用户的交互性强。本文将回顾JavaScript中的核心知识点,特别是浏览器对象模型(BOM)和文档对象模型(DOM)。 一、浏览器...
下面将根据标题和描述,结合压缩包内的文件名称,对Vue的知识点进行详细梳理。 1. **基础概念** - **虚拟DOM**:Vue使用虚拟DOM作为数据和实际DOM之间的中间层,以提高性能和效率。 - **组件化**:Vue中的组件是...
根据提供的文件信息,我们可以整理出以下关于Java的重要知识点回顾: ### 1. Java 基本数据类型 Java 提供了多种基本数据类型,包括数值型、字符型和布尔型等。 - `byte`: 占用 1 字节,取值范围为 -128 至 127。...
### 数组交换程序知识点解析 #### 一、题目概述 本题目主要涉及的是数组操作中的一个常见需求——数组元素的交换。题目要求实现一个函数`void swap(int a[], int m, int n);`,该函数的功能是将数组`a`中的前`m`个...
以下是对给定文件中提及的C语言知识点的详细总结,适合考试复习和深入理解。 ### 第1章 C语言概述 #### 1.1 C语言标识符 C语言中的标识符用于命名变量、函数、数组等实体。一个合法的标识符必须遵循以下规则: - ...
内容概要: - 涵盖了Vue的基础知识点,如指令、方法、计算属性等 - 列出了常用的指令语法,如v-...这是一份针对Vue基础知识点的速查手册,可以帮助初学者快速回顾和掌握Vue的基础语法,也可供开发者面试前进行知识点整理。
而“17_总结.avi”可能是对整个章节内容的回顾,强调了关键知识点,帮助学习者梳理所学,形成系统性理解。 总的来说,掌握二维数组是精通Java编程的基础,通过理论学习与实践操作,可以提升编程技能,为后续的面向...
- 教师通过实例讲解和分析知识点,包括数组的定义、初始化、元素访问和选择排序的实现。 知识点分析: - **数组**:数组是存储同类型元素的集合,可以通过索引来访问和修改其中的元素。 - **定义数组**:Java中...
Java基础--Java数组的认识(通透!!!) Java数组的认识是Java基础知识中的...本节课程我们学习了Java数组的概念、性质、写法、初始化、元素访问和应用等知识点。掌握这些知识点可以帮助您更好地理解和应用Java数组。
对于初学者而言,这篇英文版的C++知识点总结是极为有用的参考资料,因为它重点在于总结而不是完整介绍,便于快速回顾和查询。然而,为了完全掌握C++的各方面知识,还是需要深入阅读相关章节,并结合实际编程实践来...
【知识点详解】 这篇文档主要介绍了数学中的直角三角形判定条件和勾股定理的应用,主要针对初中数学的知识点。 1. **直角三角形的判定条件**:文档中提到了直角三角形的一种判定方法,即勾股定理的逆定理。如果一...
文件《JAVA核心知识点整理.pdf》作为Java程序员面试准备资料,提供了一个全面的Java知识点回顾,涵盖JVM运行机制、多线程编程、集合框架、IO/NIO、类加载机制等内容。这些知识点对于应聘者理解Java技术栈、提升编程...
(二) 实验涉及的知识点: 1. 数组的定义:理解数组的基本语法,包括声明、初始化和元素访问。 2. 数组排序:了解并实现一种或多种排序算法,如冒泡排序,选择排序,这有助于理解数据结构的处理。 3. 随机数的生成:...
在“135_指针15_复习上节课知识.swf”和“136_指针16_指针变量的运算.swf”中,可能回顾了指针的基本概念和运算规则,包括指针的声明、初始化、赋值、比较以及指针的算术运算。 “138_指针18_动态内存分配概述.swf...
- **回顾**:本章重点介绍了如何在C语言中使用一维数组和二维数组,并通过一个具体的项目——“软件测试工程师管理系统”来实践这些知识点。 - **知识点梳理**: - 一维数组的基本操作:声明、初始化、访问。 - 二...
除此之外,教师在课程回顾时,还会引导学生梳理数组定义、赋值、数据元素的输入输出等基础知识点,确保学生对数组的全面理解。 总结而言,《C语言实用教程(第3版)》教学教案14通过数组的排序、矩阵转置和字符串逆序...
- `$matches`:可选参数,如果提供,函数将把匹配到的结果存放在这个数组中。 - `$flags`:可选的匹配标志,如`PREG_PATTERN_ORDER`、`PREG_SET_ORDER`等。 - `$offset`:开始搜索的字符串偏移量。 二、`preg_match...
下面将详细阐述相关知识点。 1. **数组的特性**: - **数组下标**:数组的下标是从0开始的,表示数组元素的位置,例如,一个长度为n的数组,其下标范围是0到n-1。 - **存储方式**:数组在内存中是连续存储的,这...
在进入数组这一主题之前,我们首先回顾一下上一章所学的基本概念,包括变量的作用域、生存期以及存储类别等关键知识点: - **变量的作用域**: - **局部变量**:在函数内部定义的变量,其作用范围仅限于该函数。 ...