Java数据结构2

Java2 - 数据结构 迭代器是Java中常用的遍历集合的方式,它提供了一种统一的、可移植的遍历接口,并且支持在遍历过程中删除元素,是Java集合框架中重要的一部分。键值对的存储是无序的,在大部分情况下是最常用的Map实现类。需要注意的是,在使用迭代器遍历集合时,如果在遍历过程中修改了集合的结构(例如添加或删除元素),会抛出。接口的一个实现类,它基于红黑树(Red-Black Tree)实现,可以保持键的有序性。,常见实现这个接口的有两个类,用于实现不重复的多元素集合。中接口,是用来约束实现他的类,约束他里面的成员必须有。 阅读详情

目录

1.泛型续

2.线性表初

一,泛型续

(1).泛型的擦除机制

概念:在编译时,Java编译器会将泛型类型信息从代码中移除,这个过程就叫做类型擦除。 擦除后,泛型类型会被替换为其边界类型(通常是Object)或者指定的类型。

擦除过程:将泛型参数替换为其边界或Object。在必要的地⽅插⼊类型转换以保持类型安全。 生成桥接方法以保持多态性。

擦除前:

class MyArray<T> {
 public Object[] array = new Object[10];
 public T getPos(int pos) {
 return (T)this.array[pos];
 }
 public void setVal(int pos,T val) {
 this.array[pos] = val;
 }
}

擦除后:

class MyArray {
 public Object[] array = new Object[10];
 public Object getPos(int pos) {
 return this.array[pos];
 }
 public void setVal(int pos, Object val) {
 this.array[pos] = val;
 }
}

关于桥接方法:泛型类型擦除可能导致⼦类⽅法和⽗类⽅法的签名不⼀致。 为了维护Java的多态性,需要桥接⽅法来确保⼦类⽅法能够正确覆盖⽗类⽅法。当你泛型类擦除后变成object类,但你方法使用的时候传入的是string类,虽然string继承了object,但是他们始终类型不同,所以编译器会自己生成一个桥接方法来强转实现方法的正常使用,保证多态性

(2).泛型的上界

用extends关键字来实现

// T 必须是 Number 的子类,并且实现 Comparable 接口
public class SortableNumberNode<T extends Number & Comparable<T>> {
    T data;

    public int compareTo(SortableNumberNode<T> other) {
        return this.data.compareTo(other.data);
    }
}

这里extends不是继承的意思,是来规定泛型数据的范围和实现特定的接口,比如要比较大小就可以实现Comparable接口,这个很常用,不写一般默认是object

(3).泛型方法

泛型方法的书写格式

// 声明泛型参数 <E> → 返回值类型 → 方法名(参数列表)
public <E> void 方法名(E 参数) {
    // 方法体
}

用一个数组找最大值的方法来举例子

public class DataStructureUtils {
    // 泛型方法:T 必须实现 Comparable 接口
    public static <T extends Comparable<T>> T findMax(T[] array) {
        if (array == null || array.length == 0) {
            return null;
        }
        T max = array[0];
        for (T element : array) {
            if (element.compareTo(max) > 0) {
                max = element;
            }
        }
        return max;
    }
}

// 使用
public class Test {
    public static void main(String[] args) {
        Integer[] nums = {3, 1, 4, 1, 5};
        System.out.println(DataStructureUtils.findMax(nums)); // 输出 5

        String[] strs = {"banana", "apple", "cherry"};
        System.out.println(DataStructureUtils.findMax(strs)); // 输出 cherry
    }
}

这不仅使用泛型来实现类型的多样,还是先比较接口来进行比较

(4).泛型通配符

和上面所讲的T类似但是不能用来定义变量,也就不能当成具体的某种类型来写,一般用?

注意:1.通配符 ?不能用来定义泛型类 / 接口 / 方法的「类型参数」

2.?只能用在「使用泛型的地方」,比如变量声明、方法参数

1.通配符的上界(?extends)

我用Food-Fruit-Apple,Banana和一个装特殊类型的Box来举例子

class Food{ }
class Fruit extends Food{}
class Apple extends Fruit{}
class Banana extends Fruit{}
class Box<T>{
    private T data;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Box<Apple> box=new Box<>();
        box.setData(new Apple());
        func(box);
        Box<Banana> box2=new Box<>();
        box2.setData(new Banana());
        func(box2);
    }
    public static void func(Box<?extends Fruit>box){
        box.setData(new Banana());//error
        box.setData(new Apple());//error
        System.out.println(box.getData());
    }
}

因为通配符不能用来定义类,所以上面Box得用T来定义,下面func方法里面是参数类型所以可以来使用?,并且这个Box是Fruit或者Fruit的子类的一个特定的盒子,为什么不可以get但是可以set:因为这个box是很多个地方特定东西的盒子们,所以当你放入banana或者Apple的时候,是不一定能放在你对应要放入的盒子里的,除非你像main方法里面一样new一个特定的盒子,但是你拿东西肯定就只需要拿到Fruit或者Fruit的子类就行了,当你extends Fruit的时候,Box类里getdata里的T就会直接替换成Fruit,所以就可以拿了

2.通配符的下界(?super)

public static void func2(Box<?super Fruit>box){
        box.setData(new Banana());
        box.setData(new Apple());
        System.out.println(box.getData());
        Fruit fruit = box.getData();//error
    }

    public static void main(String[] args) {
        Box<Fruit> plate1 = new Box<>();
        plate1.setData(new Fruit());
        func2(plate1);
        Box<Food> plate2 = new Box<>();
        plate2.setData(new Food());
        func2(plate2);
    }

用大白话来解释一下为什么这里就可以set,但是不能get,可以理解为extends是很多个装特定水果的小盒子,super是两个大盒子,一个是fruit一个是food,在extends里你放进水果不能保证你就一定放在了特定的盒子里,但是你拿的话都是水果,所以可以拿不能放,super时候你不确定你拿的是哪一个盒子,拿到food就错误了,但是你放各种水果的时候,不管你放在fruit里面还是food里面都是可以的,因为那种水果都是水果也都是食物

3.总结一下

二,初识线性表(ArrayList与顺序表)

这是一张Java 集合框架(Java Collections Framework)的核心继承关系图,它把 Java 里所有常用的「数据容器」的关系、分类和特点

数据结构说白了,就是数据的「组织 / 摆放方式」,包括两个层面:

  1. 物理上的 “摆放”:数据在内存里实际怎么存
  2. 逻辑上的 “摆放”:数据之间的关系怎么定(谁先谁后、谁和谁关联、有没有顺序)

(我们先从线性的摆放开始学起,也就是线性表)

(1)List初识

介绍:List就是⼀个线性表,即n个具有相同类型元素的有限序列,在该序列上可 以执行增删改查以及变量等操作。

方法:

(侧边抽屉)移动端APP汉堡页设计全解:从规范落地到体验优化 汉堡页是一种隐藏式侧边导航组件,由汉堡图标(三条水平横线)、侧边抽屉面板、主界面遮罩层三部分构成。点击汉堡图标后,面板通常从左侧滑入,覆盖主界面部分区域(或悬浮于主界面之上);关闭时可通过点击关闭按钮、遮罩层、返回键或侧滑手势完成,是移动端特有的空间优化设计模式。 阅读详情

相关推荐

对接萤石平台调用播放

萤石api 管理 · 萤石开放平台API文档 httpclient pom <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> package com.ruoyi...

u011799016的博客 1773

java数据结构 mobi_数据结构:Java语言描述(第2版) pdf epub mobi txt 下载

数据结构:Java语言描述(第2版) pdf epub mobi txt 下载图书介绍☆☆☆☆☆刘小晶,杜选,朱蓉,杜卫锋 编下载链接在页面底部发表于2021-02-24类似图书 点击查看全场最低价出版社: 清华大学出版社ISBN:9787302389446版次:2商品编码:11678255品牌:清华大学包装:平装丛书名: 21世纪高等学校规划教材·计算机科学与技术开本:16开出版时间:2015-...

weixin_42314846的博客 1442

FAST-LIO2:论文和算法解析

本文介绍了FAST-LIO2算法:一种快速、鲁棒、通用的激光雷达-惯性里程计框架。FAST-LIO2基于高效的紧密耦合迭代卡尔曼滤波器,具有两个关键的新颖之处,可实现快速,稳健和准确的激光雷达导航(和测绘)。第一种方法是直接将原始点注册到地图上然后更新地图,而不提取特征。这样可以利用环境中的细微特征,从而提高准确性。消除手工设计的特征提取模块,也使其能够适应不同扫描模式的新兴激光雷达;

超爱吃小蛋糕的66的博客 1万+

java语言程序设计与数据结构7.2

java语言程序设计与数据结构7.2 只需要改动for循环里的一个条件即可,这道题的格式化输出可以记录一下。 package two; public abstract class T7_6 { public static void main(String[] args) { // TODO Auto-generated method stub final int NUMBER_OF_PRIMES = 50; // Number of primes to display final

emmaing的博客 178

Winget安装失败:深入解析InternetOpenUrl()错误0x80072efd的根源与修复

本文深入解析了使用Winget时遇到的InternetOpenUrl()错误0x80072efd。该错误通常源于DNS解析失败、网络代理配置不当或系统安全策略冲突,导致无法连接软件源。文章提供了从刷新DNS、修改Hosts文件到配置代理等一套完整的诊断与修复方案,帮助开发者快速解决安装障碍,恢复Winget的正常使用。

weixin_29290259的博客 935

STM32F407+LWIP实战:手把手教你移植mbedtls库实现Modbus TCP双向认证

本文详细介绍了如何在STM32F407微控制器上移植mbedtls库,结合LWIP协议栈实现Modbus TCP的双向认证功能。通过TLS 1.2加密通道,有效提升工业物联网通信的数据安全性,涵盖证书管理、内存优化及性能调优等关键步骤,为嵌入式系统开发者提供了一套完整的解决方案。

weixin_28721917的博客 516

Java数据结构 红黑树以及2/3树介绍

wwxy1995的博客 185

STK相关总结

STK简介 一.SIM卡应用工具包(SIM Application Toolkit),又名CAT/USAT,它包含一系列终端与SIM卡的交互指令,SIM卡可以应用卡内的小应用程序和终端交互,从而实现增值服务的目的,STK包括三种类,STK-imsi切换,STK –OTA,STK-BIP 功能: (1) Profile download:配置下载,开机初始化SIM卡过程中,终端告诉SIM卡终端支持哪些功能,STK中download指终端将数据发送给SIM卡 (2) Proactive command: 主动式

jingjing_2的博客 3357

数据结构与算法分析_Java语言描述(中文第2版)

收藏自用 链接:数据结构与算法分析_Java语言描述(中文第2版)

ZQ1csdn的博客 1374

YT8531 PHY芯片硬件设计与MDIO/RGMII实战指南

以太网PHY芯片是FPGA系统实现网络通信的物理层核心,其关键在于标准接口(如MDIO管理总线和RGMII数据接口)的正确实现与协同。MDIO作为IEEE 802.3定义的低速配置通道,负责寄存器级控制与状态监控;RGMII则通过双沿采样精简引脚,在千兆速率下兼顾性能与PCB布线可行性。技术价值体现在电压兼容性(支持1.8V/2.5V/3.3V)、可编程时序调节(RX_DELAY/TX_DELAY)及多级环回测试能力,显著提升国产FPGA平台(如Xilinx Zynq)的工程鲁棒性。典型应用场景涵盖嵌入式网

weixin_42453228的博客 1337

TSMaster MBD模块实战:如何用Simulink模型快速搭建汽车电子测试环境

本文实战演示了如何利用TSMaster的MBD模块,将Simulink模型快速部署为汽车电子自动化测试环境的核心。通过建立模型与TSMaster系统变量的实时数据通道,并利用数据仓库统一数据定义,工程师能无缝连接算法仿真与真实总线网络,显著提升从模型到HIL测试的验证效率。

php55的博客 208

java数据结构_二叉树_5.2

一棵二叉树是结点的一个有限结合,该集合:1.为空2.是由加上两颗别称为的二叉树组成。如下图:从上图可以看出:1.二叉树是不存在度大于2的结点,也就是说二叉树中的结点的度 <= 22.二叉树的子树是有左右之分的,次序不能颠倒,因此二叉树是有序树。(此处的有序并不是大小有顺序,是逻辑上的左右有序)补充:对于任意二叉树都是由一下的几种情况复合而成的,也就是说,二叉树中只会出现下图中的几种情况。

Zz_waiting的博客 703

华为面试手撕真题【字符串压缩】

华为面试手撕真题【字符串压缩】

MISAYAONE的博客 1万+

数据结构与算法分析_java语言描述_第2版 免费分享

数据结构与算法分析_java语言描述_第2版 免费分享 百度网盘下载 提取码:brtj 希望大家多关注一下我,我是一个刚刚开始学java的小白,希望能帮到更多刚开始学习java的小伙伴们,以后我会将自己学到的一些知识在优快云中分享发给大家。 ...

the_way_of_IT的博客 771

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2-3-4 树 Java数据结构与算法

<br />2-3-4 树 Java数据结构与算法<br /> <br />源代码:<br /> <br />/** * * @author sunnyykn */ import java.io.*; class DataItem { public long dData; //one data item public DataItem(long dd) { dData = dd; } public

杨梅树的盔甲 1716

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【数据结构 2】单向链表及其Java实现

一、链表 1.1 顺序表的缺点 虽然顺序表的查询很快,时间复杂度为O(1),但是增删的效率是比较低的,因为每一次增删操作都伴随着大量的数据元素移动。 可以使用链式存储结构实现线性表,来克服顺序表增删效率低的问题。 1.2 什么是链表? 链表是一种物理存储单元上非连续、非顺序的存储结构。 数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表由一系列的结点(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成。 二、单向链表Java实现 2.1 链表的结点类设计 2.1.1 节点API

Java技术工坊 591

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java学习2-java的基本数据结构

1、java提供了8中数据结构1、byte -----有符号--------1个字节2、int------有符号----------4个字节3、long------有符号--------8个字节4、char------有符号---------2个字节5、float-----有符号-------4个字节6、double-----有符号-----8个字节7、boolean-----只能取值true、f

487

java学习[2]_数据结构

数据结构简要介绍一些java中的数据结构。 Java工具包提供了强大的数据结构,在Java中的数据结构主要包括以下七种接口和类。 java数据结构介绍: 1、Enumeration接口:枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。其中包括了nextElement()方法:用来得到一个包含多元素的数据结构的下一个元素;hasmoreElements()方法:

XiaoV_0305的博客 500

Java数据结构-单链表2

数据结构-单链表2

vintind的博客 96

Java自留地2-Java数据结构2

Java自留地2-Java数据结构2

z81002623的博客 313

java数据结构和算法2

栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表 package com.yf.structure; import java.util.Arrays; import java.util.EmptyStackException; public class ArrayStack { private Object[] elementData; private int t...

weixin_40839342的博客 195

【Java数据结构】 2-链表/LinkedList

本文对比了线性表中的顺序表和链表结构。顺序表插入删除效率低(O(N)),而链表通过非连续存储解决了这一问题。重点介绍了无头单向非循环和无头双向循环链表两种结构,分析了链表核心特性:动态拓展性强、已知节点时操作效率高(O(1))。详细讲解了链表的核心操作实现(头插、尾插、指定位置操作等)及时间复杂度分析,并与Java中的LinkedList实现进行对比。最后总结了顺序表和链表在存储、访问、插入等方面的区别:顺序表适合频繁访问,链表适合频繁插入删除场景。

2301_78841039的博客 998

Java数据结构与算法2 队列

队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先...

UESTC Like 556

2.5、java核心数据结构

数据结构是计算机存储数据的方式,选用不同的数据结构存储数据,对数据的增删改查复杂度有着重大意义。 2.5.1、线性数据结构 线性结构是指该结构中的节点之间存在一对一的关系。其特点是开始节点和终端节点都是唯一的,除了开始节点和终端节点外,其余节点都有且仅有一个直接前驱,有且仅有一个直接后继。 2.5.1.1、一维数组 数组:一组有顺序(指的是每一个元素...

刘东阳的博客 247

2-3-4树【数据结构与算法java】

2-3-4树【数据结构与算法java】

小心星的博客 738

Redis Java 开发系列#2 数据结构

本文系统介绍了Redis五大数据结构的特性与应用场景:字符串(文本/计数器/缓存)、哈希(对象存储)、列表(队列/时间线)、集合(唯一性/标签系统)和有序集合(排行榜/延迟队列)。通过Java代码示例展示了各结构的操作方法,并提供了电商平台数据模型设计案例。重点分析了不同业务场景下的数据结构选择策略和内存优化技巧,帮助开发者根据实际需求选择最合适的Redis数据结构,提升系统性能和开发效率。

xh2277659985的博客 552
上一篇: Java数据结构1
下一篇: Java数据结构3(ArrayList与顺序表)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值