作为开发人员,您需要了解数据结构以及它们如何帮助您的技术旅程。本文将仅关注数组如何作为数据结构工作。本文的主要编程语言将是Java。
什么是数据结构?
数据结构是组织,处理,检索和存储数据的格式。它们旨在以特定方式安排数据,使用户可以轻松访问所需的数据。
数据结构的一些好处包括但不限于以下内容:
- 他们有助于保护数据
- 他们有助于组织数据
- 他们允许在软件系统上轻松处理数据
- 他们有助于解决现实生活中的问题。
数据结构的类型
每个开发人员都应该知道七个数据结构:
阵列
数组是著名的数据结构。数组是按时间顺序存储的值集合。数组中的值的索引为零,即存储的值从0。
开始。linkedlist
linkedlist是一个数据结构,其中包含一个数据字段,该节点链接到列表中的下一个节点。该链接也称为参考。
堆栈
堆栈是遵循特定顺序的数据结构。该订单可以是第一个,最后一个(filo)或最后一个(LIFO)订单。它们也是线性数据结构,即数据结构是在线路上排列或遵循直线趋势的。
队列
队列是一种线性数据结构,在两端都打开,并且运算首先出现在(FIFO)顺序中。
树
类似于家谱,树是节点的集合。树的每个节点存储一个值并链接到其他节点( children )。这种称为层次结构的数据结构专门组织和存储数据。
堆
堆是独特的数据结构,它们完全是二进制树。有两种类型的堆:
- 最大堆属性:这是堆大于子节点的地方,并且根节点的键比其他节点更重要。
- min堆属性:这是堆小于子节点的地方,而根节点的键是树中最小的。
图
图是涉及顶点(每个形状的角点)和边缘的数据结构。在数据结构中,顶点定义为节点和边缘,为连接两个节点的线。最终,您可以说图形是一组顶点(V)和一堆边缘(E);它称为g(e,v)。
数组作为数据结构
如前所述,数组是存储在单个变量中的多个值中的值的集合,而不是将每个值存储在单独的变量中。要在Java中声明数组,请定义变量类型,然后是方括号。
String[] books:
阵列的一个示例是鸡蛋纸箱,因为纸箱的鸡蛋按顺序排列,每个部分都保持鸡蛋。
数组通常用于构建其他更复杂的数据结构。它们也用于分类算法。
多维阵列
这些只是数组的数组,这意味着一个数组在另一个多维数组中存储/元素以表格形式存储。
多维数组的语法:
data_type[1st dimension][2nd dimension][]..[Nth dimension]
array_name = new data_type[size1][size2]….[sizeN];
-
data_type
代表数据类型,例如int
,String
,char
3 -
dimension
表示您要创建的数组的维度,例如1d,2d等 -
array_name
代表数组的名称 -
size1
,size2
表示尺寸的大小
二维阵列
二维阵列是一维数组的阵列。这是任何多维数组的最简单形式。
两个多维数组的示例:
class example {
public static void main(String[] args)
{
int[][] arr = { { 5, 0 }, { 1, 7 } };
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
输出:
5 0
1 7
三维阵列
三维阵列是多维阵列的复杂形式,因为它具有三个侧/尺寸。一种简单的理解方法是,这种多维数组的这种形式是二维数组的数组。
三个多维数组的示例:
class example {
public static void main(String[] args) {
int[][][] arr = {{{ 5, 0 }, { 1, 7 },{2 , 9}},};
for(int i=0; i < arr.length; i++){
for(int j=0; j < arr[i].length; j++){
for(int k=0; k < arr[i][j].length; k++){
System.out.print( arr[i][j][k] + " ");
}
System.out.println();
}
System.out.println();
}
}
}
如果我们执行上述代码,则输出为:
5 0
1 7
2 9
在Java中,多维数组的大小是存储的元素总数,这意味着可以通过乘以尺寸的长度来计算多维数组。
注意:在多维数组中显示数据的最佳方法是使用嵌套或双嵌套的前面循环。
ArrayLists&列表接口
arraylists
阵列清单是围绕数组并提供基本功能的数据结构。一些功能正在添加和删除元素,并检查数组是否包含元素。它是Java Collection框架的一部分,是java.util
软件包。
有时,阵列列表可能比标准数组慢。尽管如此,它们在许多阵列的操作的程序中都有帮助。
阵列列表的一个关键优势是,与数组不同,您可以声明阵列列表,无论大小如何。如果您不知道要存储的元素的程度,则可以使用arraylist。
这是阵列列表的代码段,而没有声明大小:
import java.io.*;
import java.util.*;
class example {
public static void main(String[] args)
{
ArrayList<Integer> bags = new ArrayList<>();
for (int i = 1; i <= 7; i++)
bags.add(i);
System.out.println(bags);
bags.remove(3);
System.out.println(bags);
for (int i = 0; i < bags.size(); i++)
System.out.print(bags.get(i) + " ");
}
}
输出:
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 5, 6, 7]
1 2 3 5 6 7
列表接口
在Java中,列表是提供存储Ordered collection的方法的界面。他们是孩子的界面。列表是存储重复值的对象/元素的订购集合。与数组和数组列表类似,列表允许插入元素并访问元素位置。另外,列表接口在java.util
软件包中看到并继承Collection
接口。
由于列表是接口继承,因此列表无法创建对象。您将需要一个类来创建对象;那就是Arraylist发挥作用的地方。
这是使用arraylist创建列表对象的示例:
List<Obj> list = new ArrayList<Obj> ();
列表接口中的某些操作包括:
- add(),将元素添加到列表接口;它需要两个参数。
- add(对象),在列表末尾添加一个元素。
- add(int索引,对象),在列表中的特定索引中添加一个元素。
这是一个代码段,显示了如何在特定索引中添加元素:
import java.util.*;
class example {
public static void main(String args[])
{
List<String> txt = new ArrayList<>();
txt.add("Pieces");
txt.add("Pieces");
txt.add(2, "Code");
System.out.println(txt);
}
}
输出:
[Pieces, Pieces, Code]
- set():更新列表接口;它采用一个参数,列表的索引。
这是一个代码段:
import java.util.*;
class example {
public static void main(String args[])
{
List<String> txt = new ArrayList<>();
txt.add("Pieces");
txt.add("Pieces");
txt.add(2, "Code");
System.out.println("Initial ArrayList " + txt);
txt.set(1, "Random");
System.out.println("Updated ArrayList " + txt);
}
}
输出:
Initial ArrayList [Pieces, Pieces, Code]
Updated ArrayList [Pieces, Random, Code]
- remove():从列表接口中删除元素;它需要两个参数。
- 删除(对象):删除列表末尾的元素。如果有多个对象,该方法将删除第一个对象。
- 删除(int索引,对象):删除列表中特定索引的元素。
这是一个代码段,解释了remove()
方法的工作方式:
import java.util.*;
class example {
public static void main(String args[])
{
List<String> txt = new ArrayList<>();
txt.add("Pieces");
txt.add("Pieces");
txt.add(2, "Code");
System.out.println("Initial ArrayList " + txt);
txt.remove(1);
System.out.println("After the Index Removal " + txt);
txt.remove("Pieces");
System.out.println("After the Object Removal "
+ txt);
}
}
输出:
Initial ArrayList [Pieces, Pieces, Code]
After the Index Removal [Pieces, Code]
After the Object Removal [Code]
代码挑战
现在,您知道了数组的基础知识,阵列列表,多维数组和列表,现在该测试您的知识了!本节将在Java中创建一个身份矩阵,以使您对Java中的数组的工作方式有直观的了解。
启动之前,请记住身份矩阵是一个正方形矩阵,其中主对角线的所有元素均为1s,而其他元素为0。另外,关于身份矩阵的关键说明是,如果乘以乘以它,则保持不变。
让我们开始!
创建身份矩阵的逻辑很简单。您需要在行等于矩阵的列并制作另一个位置0的位置中打印1个位置。本指南将创建一个身份矩阵8;您可以使用您认为合适的任何尺寸。
- 首先,为行和列创建实例变量。
class Matrix {
static int identity_matrix(int num)
{
int row, col;
}
- 接下来,使用嵌套的for-loops用1s和0s填充矩阵;如果您的行等于您的列,请添加1,否则添加0。然后,打印矩阵。
class Matrix {
static int identity_matrix(int num)
{
int row, col;
for (row = 0; row < num; row++)
{
for (col = 0; col < num; col++)
{
if (row == col)
System.out.print( 1+" ");
else
System.out.print( 0+" ");
}
System.out.println();
}
return 0;
}
}
- 最后,定义身份矩阵的大小。最终结果看起来像这样:
class matrix {
static int identity_matrix(int num)
{
int row, col;
for (row = 0; row < num; row++)
{
for (col = 0; col < num; col++)
{
if (row == col)
System.out.print( 1+" ");
else
System.out.print( 0+" ");
}
System.out.println();
}
return 0;
}
public static void main(String args[])
{
int size = 8;
identity_matrix(size);
}
}
您的输出应该与此相似。
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1
结论
数组是相同数据类型的值的索引序列,并固定,这限制了其方法。与数组不同,阵列列表不受尺寸和灵活性的限制。
作为软件开发人员,您会比其他数据结构更频繁地遇到数组,因为它们是最直接,最广泛使用的数据结构。
现在,您可以理解使用数组作为数据结构,并且使用它们进行了练习。您可以查看the Java documentation,以了解有关本文提到的其他数据结构的更多信息。