Java面向对象基础知识之数组和链表

yizhihongxing

Java面向对象基础知识之数组和链表

1. 数组和链表区别

数组和链表都是线性数据结构,但它们的存储方式和特点不同。

  • 数组是一种连续的内存存储方式,可以快速访问任何一个元素。但在插入和删除元素时,需要移动大量元素,效率很低,因此不适合插入和删除操作频繁的情况。
  • 链表是一种非连续的内存存储方式,每个元素存储了下一个元素的地址,因此可以快速插入和删除元素。但访问指定位置的元素时需要遍历链表,效率较低。

2. 数组

2.1 定义和初始化数组

使用数组需要先定义一个数组变量,再初始化数组。 定义方式如下:

// 定义一个int类型的数组,长度为10
int[] arr = new int[10]; 

数组初始化有两种方式:

  • 静态初始化:定义数组时赋初值
  • 动态初始化:定义数组后再逐个赋值

静态初始化方式如下:

int[] arr1 = {1,2,3,4,5};

动态初始化方式如下:

int[] arr2 = new int[5];
arr2[0] = 1;
arr2[1] = 2;
arr2[2] = 3;
arr2[3] = 4;
arr2[4] = 5;

2.2 数组遍历

使用for循环遍历数组。

for(int i=0; i<arr.length; i++){
    System.out.println(arr[i]);
}

2.3 数组排序

可以使用Arrays类中提供的sort方法对数组进行排序。如下所示:

Arrays.sort(arr);

3. 链表

3.1 定义链表

链表由多个节点组成,节点包括两部分内容:数据域和指针域。数据域存储节点的值,指针域存储下一个节点的地址。

定义链表时需要先定义节点类,然后使用节点类定义链表。

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);

node1.next = node2;
node2.next = node3;

3.2 链表遍历

使用while循环遍历链表。

ListNode node = head; // head是链表的头节点
while(node != null){
    System.out.println(node.val);
    node = node.next;
}

3.3 在链表尾部添加节点

首先需要找到链表的尾节点,然后将尾节点的next指针指向新节点。如下:

ListNode tail = head;
while(tail.next != null){
    tail = tail.next;
}
tail.next = new ListNode(val);

4. 示例

4.1 数组示例

下面是一个数组排序的示例。

import java.util.Arrays;

public class ArrayExample {
    public static void main(String[] args) {
        int[] arr = {3,5,1,4,2};
        Arrays.sort(arr);  //排序
        for(int i=0; i<arr.length; i++) {
            System.out.println(arr[i]);  //遍历输出
        }
    }
}

4.2 链表示例

下面是一个在链表尾部添加节点的示例。

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public class LinkedListExample {
    public static void main(String[] args) {
        ListNode head = new ListNode(1); //定义链表头节点
        ListNode tail = head;
        for(int i=2;i<=5;i++){ //循环添加节点
            tail.next = new ListNode(i);
            tail = tail.next;
        }
        ListNode node = head; //遍历链表
        while(node != null){
            System.out.println(node.val);
            node = node.next;
        }
    }
}

5. 总结

本文介绍了数组和链表的区别、定义和初始化、遍历、排序、以及链表添加节点等基本操作。在实际的开发中,应根据具体需求选择合适的数据结构。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java面向对象基础知识之数组和链表 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java 数据库连接池详解及简单实例

    Java 数据库连接池详解及简单实例 数据库连接池是一种管理数据库连接的技术,它使用一组数据库连接来避免在每个请求中重复创建和释放数据库连接的开销。本文将详细介绍Java中如何使用数据库连接池技术。 什么是数据库连接池 数据库连接池是一种可以在应用程序启动时创建并保持在内存中的一组预配置的数据库连接。当应用程序需要连接到数据库时,它可以从连接池中获取一个空闲…

    Java 2023年6月16日
    00
  • AJAX SpringBoot 前后端数据交互的项目实现

    讲解”AJAX SpringBoot前后端数据交互的项目实现”的步骤及示例: 1. 准备工作 首先,需要搭建好Spring Boot的环境,并在其中添加对thymeleaf和web模块的支持。若需要使用ORM,还需要添加对JPA的支持。 在前端部分,需要准备好HTML、CSS和JS等组件。 2. 建立一个Spring Boot项目 使用Spring Init…

    Java 2023年5月20日
    00
  • Spring Security使用数据库登录认证授权

    接下来我将为你讲解“Spring Security使用数据库登录认证授权”的完整攻略。 1. 概述 Spring Security是用于保护Spring应用程序的安全框架,它提供了包括身份验证、授权、攻击防御等在内的一系列安全特性。本文将介绍如何使用Spring Security对数据库进行登录认证授权。 2. 前置条件 本文假设你已经熟悉Spring Bo…

    Java 2023年5月20日
    00
  • mybatis如何设置useGeneratedKeys=true

    要设置useGeneratedKeys=true,需要在mybatis的mapper.xml文件中编写对应的代码。在这之前,需要了解一下什么是自动生成主键(Generated Key)、什么是useGeneratedKeys=true、以及如何使用。 自动生成主键是指在将数据插入到关系数据库中时,主键值可以由数据库自动生成,这种方式可以有效减少数据库的工作量…

    Java 2023年5月20日
    00
  • springboot快速整合Mybatis组件的方法(推荐)

    下面是关于springboot快速整合Mybatis组件的方法的攻略,包括以下几个步骤: 1.基础环境搭建 首先,我们应该新建一个SpringBoot工程,选择maven进行构建。我们需要在pom.xml文件中添加Mybatis和Mybatis-spring-boot-starter依赖项。核心代码如下: <dependency> <gro…

    Java 2023年5月19日
    00
  • java中的4种循环方法示例详情

    Java 中的 4 种循环方法 在 Java 中,我们可以使用 4 种不同的循环方法来循环遍历数据或执行某些操作,分别是:for 循环、while 循环、do…while 循环和增强型 for 循环,下面我们看一下每个循环的用法及示例。 for 循环 for 循环是一种指定循环次数的循环结构,其语法为: for (initialization; termin…

    Java 2023年5月26日
    00
  • 使用SpringSecurity 进行自定义Token校验

    下面是使用Spring Security进行自定义Token校验的完整攻略,步骤如下: 1. 添加依赖 在项目的pom.xml文件中添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s…

    Java 2023年5月20日
    00
  • JSP安全开发之XSS漏洞详解

    JSP安全开发之XSS漏洞详解 跨站脚本(Cross Site Scripting,简称 XSS)攻击是指攻击者往Web页面里插入恶意的Script代码,当用户浏览该页面时,嵌入其中Web里面的Script代码会被执行,从而达到攻击者的目的,如盗取用户的Cookie、登录信息等。 XSS攻击的类型 反射型XSS攻击 反射型 XSS 攻击是指攻击者要求用户点击…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部