首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从头开始创建对象的LinkedList (不使用java的API)

从头开始创建对象的LinkedList,可以通过手动实现链表数据结构来实现。链表是由节点(Node)组成的数据结构,每个节点包含一个数据项和一个指向下一个节点的指针。

以下是创建LinkedList的基本步骤:

  1. 定义节点类:创建一个表示节点的类,包含数据项和指向下一个节点的指针。例如,可以创建一个名为Node的类,包含一个数据字段和一个next字段表示下一个节点。
  2. 创建LinkedList类:创建一个表示LinkedList的类,包含对链表进行操作的方法。
  3. 定义头节点:在LinkedList类中添加一个头节点(head),用来标识链表的起始位置。头节点不包含数据项,只有一个指针指向链表的第一个实际节点。
  4. 实现插入方法:在LinkedList类中添加一个方法用来插入新的节点。该方法接受一个数据项作为参数,创建一个新的节点,并将它插入链表的头部。
  5. 实现删除方法:在LinkedList类中添加一个方法用来删除指定节点。该方法接受一个数据项作为参数,遍历链表找到匹配的节点,并删除它。
  6. 实现查找方法:在LinkedList类中添加一个方法用来查找指定节点。该方法接受一个数据项作为参数,遍历链表找到匹配的节点,并返回它。

下面是一个使用Java代码实现的示例:

代码语言:txt
复制
// 节点类
class Node {
    int data;
    Node next;

    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

// LinkedList类
class LinkedList {
    Node head;

    public LinkedList() {
        this.head = null;
    }

    // 插入节点
    public void insert(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
        } else {
            newNode.next = head;
            head = newNode;
        }
    }

    // 删除节点
    public void delete(int data) {
        if (head == null) {
            return;
        }
        if (head.data == data) {
            head = head.next;
            return;
        }
        Node curr = head;
        while (curr.next != null) {
            if (curr.next.data == data) {
                curr.next = curr.next.next;
                return;
            }
            curr = curr.next;
        }
    }

    // 查找节点
    public boolean search(int data) {
        Node curr = head;
        while (curr != null) {
            if (curr.data == data) {
                return true;
            }
            curr = curr.next;
        }
        return false;
    }
}

// 测试代码
public class Main {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.insert(3);
        list.insert(5);
        list.insert(8);

        System.out.println("LinkedList: ");
        Node curr = list.head;
        while (curr != null) {
            System.out.print(curr.data + " ");
            curr = curr.next;
        }
        System.out.println();

        list.delete(5);

        System.out.println("LinkedList after deleting 5: ");
        curr = list.head;
        while (curr != null) {
            System.out.print(curr.data + " ");
            curr = curr.next;
        }
        System.out.println();

        System.out.println("Search 8: " + list.search(8));
        System.out.println("Search 5: " + list.search(5));
    }
}

这样,就可以通过手动实现链表数据结构来创建对象的LinkedList。注意,以上示例代码仅为演示目的,可能不是最优实现。在实际开发中,可以根据具体需求进行优化和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java 对象创建使用

概述 HotSpot 是在 JIT 之后一款 java 虚拟机开源实现,sun 从 JDK 1.3.1 开始使用。 它主要使用 C++ 实现,相对于 JIT,性能有大幅提高。...对象创建 内存分配 java 中,最经常发生就是对象创建,那么,虚拟机在 java 对象创建过程中发生了什么呢?...空闲列表 — 对于已使用空间和空闲空间交错情况,指针碰撞就无法使用了,这个时候 jvm 必须维护一个空闲列表,保存每段空闲空间首地址和长度,分配时 jvm 从列表中查找到足够大一块空闲空间划分给对象...,并更新列表,通常,使用 CMS 这种基于 Mark-Sweep 算法收集器时采用 原子性 由于 java 是线程模型,所以需要考虑频繁对象创建线程安全问题。...下面的两图分别展示了通过句柄访问对象和通过指针访问对象存储模式: 使用句柄最大好处是 reference 中存储是稳定句柄地址,在对象移动、垃圾收集等工作中,只需要更新指针,而不需要改变 java

84710

Java对象创建

Java对象创建过程,从虚拟机接收到字节码new指令开始。...2.2 空闲列表 Java堆中内存,很可能不是绝对规整,而是使用内存和空闲内存互相交错存在。这种情况,为对象分配内存就可以使用空闲列表方式。...2.3 内存分配方式依据 具体使用哪种方式为新对象分配内存取决于Java堆内存是否规整,而Java堆内存是否规整,取决于采用垃圾收集器是否具有 空间压缩整理 能力。...2.4 内存分配问题和解决方案 在Java应用中,对象创建非常频繁,对应Java虚拟机为新对象分配内存行为也非常频繁,而虚拟机为对象分配内存操作在并发时并不是线程安全,因为分配和移动指针、...TLAB时置零),这样可以保证对象属性字段赋初始值就可以使用,此时程序访问这些字段将得到字段类型对应零值(byte,short,int,long对应是 0,float和double对应是 0.0

1K30
  • 如何正确创建和销毁Java对象

    二、实例构造(Instance Construction) Java是面向对象编程语言,所以新实例(objects)创建可能是它最重要概念之一。...2.7 垃圾回收(Garbage collection) Java(特别是JVM)使用自动垃圾回收机制。简而言之,当新对象创建,JVM就会自动为这些新创建对象分配内存。...Java垃圾回收是分代,基于这种假设(分代假设)大多数对象在很年轻时候就已经不可达(在他们被创建之后很短时间内就没有任何引用并且被安全销毁)。...大多数开发者曾经相信在Java创建对象是很慢并且应该尽可能地避免新对象实例化。 实际上,这并不成立:在Java创建对象开销非常小并且很快。...这是因为Java使用垃圾收集器去管理对象生命周期,并且垃圾收集器责任就是去销毁无用对象并回收这些对象占用内存。

    1.4K20

    如何正确创建和销毁 Java 对象

    ## 二、实例构造(Instance Construction) Java 是面向对象编程语言,所以新实例(objects)创建可能是它最重要概念之一。...### 2.7 垃圾回收(Garbage collection) Java(特别是 JVM)使用自动垃圾回收机制。简而言之,当新对象创建,JVM 就会自动为这些新创建对象分配内存。...Java 垃圾回收是分代,基于这种假设(分代假设)大多数对象在很年轻时候就已经不可达(在他们被创建之后很短时间内就没有任何引用并且被安全销毁)。...大多数开发者曾经相信在 Java创建对象是很慢并且应该尽可能地避免新对象实例化。 实际上,这并不成立:在 Java创建对象开销非常小并且很快。...这是因为 Java 使用垃圾收集器去管理对象生命周期,并且垃圾收集器责任就是去销毁无用对象并回收这些对象占用内存。

    2.9K40

    如何正确创建和销毁 Java 对象

    二、实例构造(Instance Construction) Java是面向对象编程语言,所以新实例(objects)创建可能是它最重要概念之一。...2.7 垃圾回收(Garbage collection) Java(特别是JVM)使用自动垃圾回收机制。简而言之,当新对象创建,JVM就会自动为这些新创建对象分配内存。...Java垃圾回收是分代,基于这种假设(分代假设)大多数对象在很年轻时候就已经不可达(在他们被创建之后很短时间内就没有任何引用并且被安全销毁)。...大多数开发者曾经相信在Java创建对象是很慢并且应该尽可能地避免新对象实例化。 实际上,这并不成立:在Java创建对象开销非常小并且很快。...这是因为Java使用垃圾收集器去管理对象生命周期,并且垃圾收集器责任就是去销毁无用对象并回收这些对象占用内存。

    2.3K30

    如何正确创建和销毁 Java 对象

    二、实例构造(Instance Construction) Java是面向对象编程语言,所以新实例(objects)创建可能是它最重要概念之一。...2.7 垃圾回收(Garbage collection) Java(特别是JVM)使用自动垃圾回收机制。简而言之,当新对象创建,JVM就会自动为这些新创建对象分配内存。...大多数开发者曾经相信在Java创建对象是很慢并且应该尽可能地避免新对象实例化。 实际上,这并不成立:在Java创建对象开销非常小并且很快。...这是因为Java使用垃圾收集器去管理对象生命周期,并且垃圾收集器责任就是去销毁无用对象并回收这些对象占用内存。...Java 创建对象 6 种方式 阿里为什么推荐使用 LongAdder? 新来一个技术总监:禁止戴耳机写代码。。 重磅!

    1.9K10

    Java虚拟机--对象建立你对象如何创建

    对象如何创建Java是一门面向对象编程语言,在Java程序中,我们做最多一件事,就是new对象,在程序运行过程中,无时无刻都有对象创建出来。...在实际开发过程中,有很多行为可以引起对象创建,最直接最常用就是使用new关键字来进行创建,这种方式在Java规范中被称为:由执行类实例创建表达式而引起对象创建。...指针碰撞:Java虚拟机堆中内存规整,所有使用内存放在一块,未使用放在另一块,在则两者之间使用指针作为分界点,当实际分配内存时候就移动该指针位置,把指针向空闲区域移动一段,移动距离与所创建对象大小相等...空闲列表:实现上面的前提是Java虚拟机堆内存规整,而空闲列表实现场景是内存规整,已使用和未使用交替存在,当有对象要来分配时,无法通过移动指针形式来进行分配,此时虚拟机必须维护一个列表---...并发情况下,如何保证数据安全,总不能一块区域,被多次覆盖吧,那我数据岂不是就丢了?会不会出现Java虚拟机正在给A对象分配内存,指针还没来得及修改,B对象又在相同位置做同样指针移动呢?

    1.2K60

    java对象创建(一)

    一、什么是Java对象Java中,对象是具有状态和行为实体。状态是指对象属性值,行为是指对象可以执行操作。每个对象都是由一个类创建,类是一种模板,描述了对象属性和行为。...在Java中,创建对象需要进行实例化操作,即通过关键字 new 来调用类构造方法,创建一个新对象实例。 二、Java对象创建 Java对象创建包含两个步骤: 定义类 定义类是创建对象第一步。...类成员变量:描述了对象属性,包括访问修饰符、数据类型和变量名。 类构造方法:用于创建对象实例,构造方法与类同名,没有返回值。...三、Java对象访问和使用 创建对象实例后,可以通过对象名来访问对象属性和方法。对象属性和方法可以使用 ....接下来通过对象名访问了对象属性和方法,同时也展示了如何修改对象属性。

    40630

    Java对象创建过程

    下图便是 Java 对象创建过程: Java创建对象过程 ?...初始化零值: 内存分配完成后,虚拟机需要将分配到内存空间都初始化为零值(不包括对象头),这一步操作保证了对象实例字段在 Java 代码中可以赋初始值就直接使用,程序能访问到这些字段数据类型所对应零值...设置对象头: 初始化零值完成之后,虚拟机要对对象进行必要设置,例如这个对象是那个类实例、如何才能找到类元数据信息、对象哈希吗、对象 GC 分代年龄等信息。 这些信息存放在对象头中。...执行 init 方法: 在上面工作都完成之后,从虚拟机视角来看,一个新对象已经产生了,但从 Java 程序视角来看,对象创建才刚开始, 方法还没有执行,所有的字段都还为零。...记住:只要使用 new 方法,便需要创建对象。 2 String 类型常量池比较特殊。它主要使用方法有两种: 直接使用双引号声明出来 String 对象会直接存储在常量池中。

    90000

    java对象创建(二)

    除了通过构造方法来创建对象外,还可以通过其他方法来创建对象,例如: 通过工厂方法创建对象Java 中,可以通过工厂方法来创建对象。所谓工厂方法,就是在一个方法中创建并返回一个对象。...这样做好处是可以将对象创建使用分离,降低代码耦合度。...由于 CarFactory 类中 createCar() 方法是静态,因此可以直接通过类名调用。 通过克隆方法创建对象Java 中,对象可以通过克隆方法来创建一个与原对象完全相同对象。...clone() 方法来克隆一个新 Person 类对象。...此外,由于 clone() 方法返回是 Object 类对象,因此需要将其强制转换为 Person 类型。最后,我们比较了原对象和克隆对象是否相等,结果是不相等

    36030

    java对象创建过程

    面试官:创建java对象有哪几种方式? 小白:new、clone、反射、反序列化。 面试官:那你知道 new 一个对象时候,JVM 做了哪些事吗?说说具体过程。...你有没有发现,我们在类中定义成员变量,是不需要赋初始值也可以使用,而局部变量,没进行初始化去使用就会报错。这是为什么呢?就是因为在对象创建过程中有“初始化零值”这一步。...java 对象头包括: Mark word:存储对象自身一些数据,比如 hashCode,gc 分代年龄等; Klass pointer:存储指针,JVM 通过这个指针来确定该对象是哪个类实例; array...执行init方法: 经过上面四个步骤,一个新 java 对象就已经产生了,最后就是执行 init 方法,让对象按照程序猿意愿,进行初始化。什么叫按照程序猿意愿初始化?...就是你 new 对象时候传了哪些参数,属性值是什么。 内存分配过程中,如何保证线程安全呢?JVM 采用 TLAB + CAS 方式保证线程安全。

    57210

    Java对象创建过程

    这是我参与「掘金日新计划 · 12 月更文挑战」第37天,点击查看活动详情 Java对象创建过程 类加载检查:虚拟机遇到⼀条 new 指令时,首先将去检查这个指令参数是否能在常量池中定位到这个类符号引...初始化零值:内存分配完成后,虚拟机需要将分配到内存空间都初始化为零值(不包括对象头),这⼀步操作保证了对象实例字段在 Java 代码中可以赋初始值就直接使⽤,程序能访问到这些字段数据类型所对应零值...设置对象头:初始化零值完成之后,虚拟机要对对象进⾏必要设置,例如这个对象是那个类实例、如何才能找到类元数据信息、对象哈希码、对象 GC 分代年龄等信息。这些信息存放在对象头中。...执行init方法:在上面工作都完成之后,从虚拟机视⻆来看,⼀个新对象已经产⽣了,但从Java 程序视角来看,对象创建才刚开始, ⽅法还没有执⾏,所有的字段都还为零。...内存分配并发问题 在创建对象时候有⼀个很重要问题,就是线程安全,因为在实际开发过程中,创建对象是很频繁事情,作为虚拟机来说,必须要保证线程是安全,通常来讲,虚拟机采⽤两种⽅式来保证线程安全: CAS

    11110

    Java 类和对象如何定义Java类,如何使用Java对象,变量

    参考链接: Java对象和类 1.对象概念 :万物皆对象,客观存在事物皆为对象  2.什么是面向对象:人关注一个对象,实际上是关注该对象事务信息   3.类:类是模子,确定对象将会拥有的特征(...对象是一个你能够看得到,摸得着具体实体    如何定义Java类:  1.类重要性:所有Java程序都以类class为组织单元  2.什么是类:类是模子,确定对象将会拥有的特征(属性)和行为(方法...方法n;                                           }   Java对象  使用对象步骤:  1.创建对象:      类名 对象名 = new 类名(); ...      Telphone phone =new Telphone();  2.使用对象    引用对象属性:对象名.属性        phone.screen = 5; //给screen属性赋值...  2.初始值不相同:          Java会给成员变量一个初始值          Java不会给局部变量赋予初始值,必要初始化  3.在同一个方法中,不允许有同名局部变量;  在不同方法中,

    6.9K00

    Java创建对象方式

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象方法,我们会在这篇文章中学到。...Java中有5种创建对象方式,下面给出它们例子还有它们字节码 ? 如果你运行了末尾程序,你会发现方法1,2,3用构造函数创建对象,方法4,5没有调用构造函数。...1.使用new关键字 这是最常见也是最简单创建对象方式了。通过这种方式,我们可以调用任意构造函数(无参和带参数)。...."":()V 2.使用Class类newInstance方法 我们也可以使用Class类newInstance方法创建对象。这个newInstance方法调用无参构造函数创建对象。...4.使用clone方法 无论何时我们调用一个对象clone方法,jvm就会创建一个新对象,将前面对象内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数。

    1K30

    Java对象创建和销毁

    类实例化可生成对象,实例方法就是对象方法,实例变量就是对象属性。一个对象生命周期包括三个阶段:创建使用和销毁。 创建对象 创建对象包括两个步骤:声明和实例化。...空对象       一个引用变量没有通过new分配内存空间,这个对象就是空对象Java使用关键字null表示空对象。...避免创建不必要对象 (1)注意String是有常量池,它实际上是通过private final char[]来存放,所以它是不可变,只有第一次使用这个字符串组合时候才进入常量池:new String...("abc");实际上是有两个字符串对象,"abc"是编译期存在,它已经进入常量池了; (2)对于Calendar这样实例化代价较大对象考虑尽量复用; (3)使用自动装箱类型一定要特别小心,以免在循环中因为自动装箱而创建大量对象...,能用基本类型就不要用装箱类型; (4)小对象创建和销毁代价是很小,因此,使用对象时候一定要考虑是不是值得,使用对象池管理不当也可能造成内存泄漏。

    1.7K60

    Java创建对象方式

    1 问题 作为Java开发者,经常创建很多对象,你是否知道Java创建对象有哪些方式呢? 2 方法 (1)new关键字 使用new关键字创建对象,是最常见也是最简单创建对象方式。...(2)Class.newInstance Class类Class.newInstance使用是类public无参数构造方法。...(4)Clone 无论何时我们调用一个对象clone方法,JVM就会创建一个新对象,将前面的对象内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。...目前我们所学内容中,对new关键字方法有了一些具体掌握,举例如下: Scanner s = new Scanner(System.in);应用new创建对象,进行对象实例化 import java.util.Scanner...使用new关键字创建对象是最常见也是最简单方式,通过这种方式可以调用任意构造器。后面将继续对其他四种方法进行详细学习并整理。

    1.7K10

    如何创建对象以及jQuery中创建对象方式(推荐)

    工厂模式 在实际使用当中,字面量创建对象虽然很有用,但是它并不能满足我们所有需求,我们希望能够能够和其他后台语言一样创建一个类,然后声明类实例就能够多次使用,而不用每次使用时候都要重新创建它,于是...与原型中this都被强行指向了new创建实例对象。...5. jQuery中创建对象如何实现? 其实通过上面方式,使用构造函数声明实例专属变量和方法,使用原型声明公用实例和方法,已经是创建对象完美解决方案了。...可是唯一不足在于,每次创建实例都要使用new来声明。...这样未免太过麻烦,如果jquery对象也这样创建,那么你就会看到一段代码中有无数个new,可是jQuery仅仅只是使用了$('xxxx')便完成了实例创建,这是如何做到呢?

    5K20

    如何使用Java API访问CDHKudu

    Fayson主要介绍如何使用Java API操作Kudu。...环境准备 ---- 1.安装Kudu服务,Fayson这里就不在介绍了,可以参考《如何在CDH中安装Kudu&Spark2&Kafka》 2.修改Kudu配置,由于Fayson使用是AWS环境这里跨了网段需要进行配置...如果未配置在使用Java API访问Kudu时报如下错误 W1128 16:56:55.749083 93981 negotiation.cc:318] Unauthorized connection...5.Impala访问集成 ---- 在这里通过Java API创建Kudu表默认Impala是不能访问,需要在Impala中执行如下建表语句: CREATE EXTERNAL TABLE `user_info...6.总结 ---- 在使用Java API访问Kudu时如果跨了网络则需要增加配置--trusted_subnets=0.0.0.0/0将网络添加到受新人列表 通过Java API接口创建Kudu表,

    6K60

    Promise对象创建使用

    为什么要使用promise?...它指定回调函数方式更加灵活,当new出一个promise时候,这个任务就立刻开始执行了,后面的回调函数会在异步执行完后进行回调,在没有promise之前就不一样了:必须在启动异步任务之前指定回调函数...,而有了promise:启动异步任务=>返回promise对象=>给promise对象绑定回调函数(甚至可以在异步操作完成后) promise支持链式调用,可以解决回调地狱问题(回调函数嵌套调用),...如果想更加通俗易懂,可以使用async/await方式进行改进 const p = new Promise((resolve,reject)=>{ //执行异步操作任务...数据 onResolved console.log('成功回调',value) }, reason =>{//接受得到失败reason数据

    96310
    领券