数组、链表、堆、栈、队列、树、哈希、图
数组是一种基本线性结构的数据结构,可以存储基本类型数据或对象,连续的存储空间和
数组的元素是可以重复的。数组只是存储元素的容器,它不对元素的值做任何限制
一旦创建,其大小就是固定的,不能动态地增加或减少元素。
2.1.1 定义了一个数组
int[ ] arr = new int[ ];
2.1.2 通过索引给数组中的每个元素赋值
arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5;
2.1.3 通过索引来访问或修改数组中的元素
// 访问第一个元素,结果是1 int firstElement = arr[0];
// 访问第二个元素,结果是2 int thirdElement = arr[2];
// 修改数组中的元素 arr[0] = 20;
// 将第二个元素修改为10 arr[1] = 10;
2
.1.4
在Java中,数组的大小是固定的,不能直接删除元素。但是你可以通过创建一个新的数
组,然后将原数组中除了第一个元素之外的其他元素复制到新数组中,从而实现删除第一个
元素的效果。
// 创建一个新的数组,其长度比原数组小1 int[] newArr = new int[arr.length - 1];
// 将原数组中除了第一个元素之外的其他元素复制到新数组中
System.arraycopy(arr, 1, newArr, 0, newArr.length);
// 更新arr,使其指向新数组 arr = newArr;
2.2.1// 创建一个可以存储3个Person对象的数组
Person[] persons = new Person[3];
2.2.2// 在数组的第三个位置分别存储一个Person对象
persons[0] = new Person("张三", 20);
persons[1] = new Person("李四", 25);
persons[2] = new Person("王五", 30);
2.2.3// 访问数组中的第一个元素 Person firstPerson = persons[0];
// 修改数组中的元素 persons[1] = new Person("赵六", 28);
链式的线性表,采用链式存储(非连续、非顺序的内存空间),
链表中的每一个独立的元素被称为结点,故链表由一系列的结点组成。
每个结点都由两部分组成:数据域、指针域。
数据域用来存放当前结点需要存储的数据内容,
指针域用于存放当前结点的下一个结点的地址。如下图所示:
生活举例熟悉概念:假如我们需要存放一堆物品,但没有足够大的空间将所有的物品一次性放
下,此时该如何既放下所有的物品,又能简单的找到所有的物品位置呢?我们可以尝试
采用如下解决方案:存放物品时,每放置一件物品就在该物品上贴一个小纸条,标明下
一件物品放在哪里。这样,我们只需要记住第一件物品的位置,从第一件物品上的小纸
条,就可以找到第二件物品,再根据第二件物品纸条的内容就找到第三件物品。按照这
个方法依次类推,我们便可以找到所有的物品,这就是所谓的链式存储。
2.1.1 定义了一个数组
LinkedList<String> linkedList = new LinkedList<>();
2.1.2 // 在链表头部添加元素 linkedList.addFirst("元素0");
//添加元素linkedList.add("元素1");
// 在链表尾部添加元素 linkedList.addLast("元素4");
2.1.3// 移除链表头部元素 linkedList.removeFirst();
// 移除链表尾部元素 linkedList.removeLast();
//删除第五个元素 linkedList.remove(4);
2.1.4 使用set(int index, E element)方法来修改链表中的某个元素,
其中index是元素在链表中的位置(从0开始计数),element是新的元素。
// 修改链表中第一个元素 linkedList.set(0,"修改元素");
2.5// 获取链表中第一个元素 Person firstPerson = linkedList.get(0);
2.2.1 LinkedList<Person> linkedList = new LinkedList<>();
2.2.2 // 创建Person对象 Person person1 = new Person("张三", 20);
Person person2 = new Person("李四", 25);
2.2.3 // 在链表首部添加元素 linkedList.addFirst(person1);
// 在链表尾部添加元素 linkedList.addLast(person2);
2.2.4// 创建Person对象 Person person3 = new Person("王五", 30);
// 修改链表中第一个元素 linkedList.set(0, person3);
1.线性结构:
在Java中,线性结构是一种数据结构,它的元素之间存在一对一的线性关系。
线性结构有两种不同的存储方式:顺序存储和链式存储。
顺序存储的线性表称为顺序表,顺序表中的元素在内存中是连续存储的,例如数组。
链式存储的线性表称为链表,链表中的元素在内存中可以是非连续存储的,
元素节点中存放数据元素以及指向下一个节点的指针。
线性结构有以下几个特点:
在Java中,常见的线性结构包括数组、链表、栈、队列等。
2.内存地址:
文章浏览阅读1.6k次。最近在重新学习MediaPlayer的使用,首先扫描出sd卡的所有MP3文件,然后点击item可以切换播放,调用 setDataSource切换数据源,刚开始的切换流程是mMediaPlayer.stop()mMediaPlayer.setDataSource(filePath)mMediaPlayer.prepareAsync()结果闪退,报IllegalStateExcepti..._android mediadatasource
文章浏览阅读1.7k次。 UPDATE gt_agent_day_corr_optstatus
文章浏览阅读1k次。1.编写函数正整数的每个位上的数字逆序输出#include <iostream>using namespace std;void reverseDigit(int num){ int n=num,i=0; //判断num是几位数 while(n>0) { n=n/10; i++; } int a[100]; for(int j=0;j<i...
文章浏览阅读75次。TestDeadLock.java:package com.ctgu.testDeadLock;public class TestDeadLock {public static void main(String[] args) {User user = new User("大毛", "123", 22);User user2 = new User("二毛", "456", 44);new Thre..._java多线程死锁的例子
文章浏览阅读103次。http://www.jroller.com/sjivan/entry/lingo_spring_remoting_passing_clientLingo (Spring Remoting) : Passing client credentials to the serverSpring Remoting allows you to export a service interface w..._clientcontextholder
文章浏览阅读307次。背景说明:Android原生的开发包是直接通过gradle加载aar使用,由于客户需要模块的cordova插件,于是只能引用aar解压出来的jar包,通过cordova创建项目,指定Android平台,引入插件,然后编译安装(此时创建的项目可以通过AndroidStudio打开)Cordova创建的项目 在Android6.0上跑报如下错误,字面上看java编译器拒绝编译这个类Re..._codova aar
文章浏览阅读1.1w次。命令行docker logs -f -t --since="2018-03-31" --tail=100 elastic_raman–since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。 -f : 表示查看实时日志 -t : 查看日志产生的日期 -tail=200 : 查看最后的200条日志。 sleepy_snyder 容器的名称,并不是镜像的名字注..._docker logs查询倒数200行日志
文章浏览阅读8.1k次,点赞17次,收藏38次。今天说下了消息队列中间件,各种队列性能对比,RabbitMQ队列,交换机(Exchange)以及消息中间件的应用场景,然后带着大家一起实现RabbitMQ的五种消息模型。消息队列中间件消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和终一致性[架构] 使用较多的消息队列有 ActiveMQ,RabbitMQ,ZeroMQ,K..._rabbspringbootitmq五种消息模型
文章浏览阅读372次,点赞3次,收藏10次。光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性。_checkstyle-idea 插件。 安装步骤
文章浏览阅读2.1k次,点赞2次,收藏8次。Ruby 正则表达式1. 简介正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找字符串集合,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。2. 语法正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的模式,如下所示:/pattern//pattern/..._ruby正则表达式语法大全
文章浏览阅读2.8k次,点赞2次,收藏9次。阿里云OSS控制台:创建私有bucket,创建子账户,添加权限AliyunOSSFullAccess,设置跨域服务端代码:导入依赖,获取policy接口代码前端代码: vue+element UI报错排坑:跨域错误,400错误_vue3怎么获得oss bucket文件
文章浏览阅读7.4k次,点赞2次,收藏14次。1. 应用场景 网络编程中有这样一种场景:需要应用程序代码一边从TCP/IP协议栈接收数据(reading data from socket),一边解析接收的数据。具体场景例如:用户点击Youtube或优酷网站上的视频内容,这时用户PC上的播放软件就是一边接收数据一边对数据进行解码并播放的。这样的场景的存在如下约束:1. 必须边接收数据,边对数据进行解析,不能等待到数据全部接收完_环形缓冲区优化的posix实现