数组和链表
java的数组是什么:数组是用来存放同一种数据类型的集合,

数组中每个元素都是相通的数据类型,数组就是在内存中划分一串连续的空间(数组作为对象允许使用new关键字进行内存分配),注意只能存放同一种数据类型(Object类型数组除外),数组是一种数据结构

 举个栗子:string:就是char类型的数组。
为什么要学数组:因为数组可以存放许多相同的数据类型!!编写程序时省去了很多代码量!!
怎么使用数组:
第一种方式:

数据类型 []  数组名称 = new 数据类型[数组长度];

这里 [] 可以放在数组名称的前面,也可以放在数组名称的后面,我们推荐放在数组名称的前面,这样看上去 数据类型 [] 表示的很明显是一个数组类型,而放在数组名称后面,则不是那么直观。
//声明数组1,声明一个长度为5,只能存放int类型的数据
int [] a = new int[5];

System.out.println(a.length);

第二种方式:
数据类型[] 数组名称={数据1,数据2}。
//声明数组2,声明一个数组元素为 1,2,3,4,5的int类型数组

int [] b = {1,2,3,4,5};
System.out.println(b.lengyh);

访问数组元素以及给数组元素赋值:

数组是存在下标索引的,通过下标可以获取指定位置的元素,数组小标是从0开始的,也就是说下标0对应的就是数组中第1个元素,可以很方便的对数组中的元素进行存取操作。我们在声明数组的同时,也进行了初始化赋值。        

int[] a={1,2,3};//元素长度为三,超出就会报错

a[0]=1;//下标为0的值为1

system.out.println(a[0]);//访问数组的第一个元素

length:是数组的长度。可以通过数组名.length获取长度

循环数组

//声明数组,声明一个数组元素为 1,2,3的int类型数组
int [] c = {1,2,3};
for(int i = 0 ; i < c.length ; i++){

System.out.println(c[i]);

//循环变量i从0开始递增直到达到数组的最大长度,每次循环加1.。。

一些练习:

double[] myList = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for (int a = 0; a < myList.length; a++) {
System.out.println(myList[a] + " ");
}
// 计算所有元素的总和
double sum= 0;
for (int b = 0; b < myList.length; b++) {
sum+= myList[b];
}
System.out.println("sumis" +sum);
// 查找最大元素
double max = myList[0];
for (int d = 1; d < myList.length; d++) {
if (myList[d] > max) 
max = myList[d];
}

System.out.println("Max is " + max);

数组的排序

语法:Arrays.Sort数组名)

注意:在排序之前加上   Arrays.name(数组名)就可以完成升序排列 了

int[] a={199,27,31}

array.sort(a);

System.out.println("排序后的值");

for (int j = 0; j <a.length; j++) {

System.out.println(a[j]);
//可以.tostring方法把数组变成字符串

}

多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组

数据类型[][] 数组名;

数组名=new 数据类型[1][2];

int[][] a=new int[3][4];//二维数组 a 可以看成一个两行三列的数组。

赋值:二维数组的赋值,和一维类似,可以通过下标来逐个赋值,

举个栗子:

int[][] s= new int[2][];

s[0] = new int[2];

s[1] = new int[3];

s[0][0] = 22;

s[0][1] = 23;

s[1][0] = 24;

s[1][1] = 25;

s[1][2] = 26;

数组实现数据结构:

数据结构的作用:模拟生活中的数据存储;对数据进行增删改查

和数据库的区别
对该同学信息进行增删改查
数据库是把数据存到磁盘里面,他支持可调定式
电脑存数据有两块区域,第一个是硬盘,第二个是内存。硬盘是永久储存,内存是临时的,但是内存数据快。
 通过需求分析 模拟数据存储的案例
举个栗子:模拟LOL代号的存储,假设我现在是某只战队的教练,我需要安排上场的人员(不要问为什么是LOL,我只玩LOL)
作为一个教练要安排上场
1.初始化容量为5的线性列表,准备用来存储场上的五个代号
2.安排人员上场(uzi,looper,mata,xiaohu,mlxg)
3.查询指定位置的的人员的名字,查询索引位置为0的人员为uzi
4.根据名字查询该人员在场上的索引位置,代号mata的人员在场上的索引位置2
5.替换场上索引位置为2的人员,替换之后该人员为ming,ming把mata替换了
6.替换名字为looper的人员员,替换之后为letme。
7.假设,把场上索引位置为2的人员罚下场,没补位
8.按照人员在场上的位置,打印出球该成员的名字可打印分割
通过上面的代码发现了数组的局限性

  数组的局限性分析:

 插入快,查找慢,删除慢,数组一旦创建后,大小就固定了,不能动态扩展数组的元素个数。如果初始化你给一个很大的数组大小,那会白白浪费内存空间,如果给小了,后面数据个数增加了又添加不进去了。

链表:

链表:是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针。

1.单项链表:只能从头遍历到尾巴,或者从尾巴遍历到头部,就像火车头和火车尾。

2.双向链表:可以看做是两个单项列表,一个可以从头到尾,一个可以从尾到头。

通过引用表示上一个节点和下一个节点的关系

举个栗子:对双向列表的增删

package com.alphabet.link;
public class MyLinked {
private Node frist;  //第一个节点
private Node last;  //最后一个节点
private int size=0;  //节点的数量
public void remove(Object obj) {
// TODO Auto-generated method stub
Node n=this.frist;
for (int i = 0; i < size; i++) {
if (!n.size.equals(obj)) {
if (n.next==null) {
return;
}
n=n.next;
}
}
//删除节点
if (n==frist) {
this.frist=n.next;
this.frist.prev=null;
}else if (n==last) {
this.last=n.prev;
this.last.next=null;
}else {
n.prev.next=n.next;
n.next.prev=n.next;
}
System.out.println("该删除的值"+n.size);//找到被删除的节点
}
public void addlast(Object obj) {//需要保存的节点对象
// TODO Auto-generated method stub
Node node=new Node(size);
if (size == 0) {
this.frist=node;
this.last=node;
}else {
this.last.next=node.frist;//把之前第一个作为新增下一个的节点
node.prev=this.last;//把新增节点作为之前第一个节点的上一个节点
this.last=node;//把新增节点作为最后一个节点
this.frist.prev=node;//把之前新增节点作为之前第一个节点的上一个
this.frist=node;//把新增节点作为第一个节点
}
size++;
}
public void addfrist(Object obj) {//需要保存的节点对象
// TODO Auto-generated method stub
Node node=new Node(size);
if (size == 0) {
this.frist=node;
this.last=node;
}else {
this.last.next=node;//把新增节点作为之前最后一个的下一个的节点
node.prev=this.last;//把之前最后一个节点作为新增节点的上一个节点
this.last=node;//把新增节点作为最后一个节点
}
size++;
}
@Override
public String toString() {
// TODO Auto-generated method stub
if (size==0) {
return "[]";
}
StringBuilder s=new StringBuilder(size*2+1);
Node n=this.frist;
s.append("[");
for (int i = 0; i < size; i++) {
s.append(n.size);
if (i!=size-1) {
s.append(",");
} else {
s.append("]");
}
n=n.next;//获取自己的下一个节点
}
return super.toString();
}
public class Node{
public Node frist;
private Node prev;//上一个节点
private Node next;//下一个节点对象
private Object size;//当前节点中存储的数据
public Node(Object obj) {
// TODO Auto-generated constructor stub
this.size=obj;
}
}
public static void main(String[] args) {
MyLinked link=new MyLinked();
link.addfrist("A");
System.out.println(link);
link.addfrist("B");
link.addfrist("D");
}
}

 

转载于:https://www.cnblogs.com/lw687a/p/9508756.html

java的数组和链表从熟系到陌生相关推荐

  1. java数组和链表6_java的数组和链表从熟系到陌生

    s[1][2] = 26; 数组实现数据结构: 数据结构的作用:模拟生活中的数据存储:对数据进行增删改查 和数据库的区别 对该同学信息进行增删改查 数据库是把数据存到磁盘里面,他支持可调定式 电脑存数 ...

  2. Java数据结构——数组、链表

    目录 数据的存储物理结构和逻辑结构 数组 数组的定义与初始化 特点 链表 链表相关代码技巧 数组与链表对比 数据的存储物理结构和逻辑结构 按物理结构: ①:连续的存储空间:数组 元素相邻,在内存中开辟 ...

  3. Java集合数组和链表

    先来介绍下最最简单的数据结构,数组和链表. 一.数组   数组是我们使用到的最简单的一个数据结构,数组的使用 // 动态初始化:初始化时由程序员只指定数组长度,由系统为数组元素分配初始值 char c ...

  4. java 二维链表_Java数据结构与算法----数组与链表

    数据类型 1 数据类型介绍 数据类型的分类(按照结构划分):线性结构和非线性结构 线性结构:线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序 ...

  5. 牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树

    不多说,直接上干货! 首先来说一个非常形象的例子,来说明下数组和链表. 上体育课的时候,老师说:你们站一队,每个人记住自己是第几个,我喊到几,那个人就举手,这就是数组. 老师说,你们每个人记住自己前面 ...

  6. c++使用单向链表存储一组有序数据_《一起学习java和数据结构》系列-数组和链表...

    数组 数组是一个线性表数据结构.它用一段连续的内存地址空间,来存储一些相同类型的数据. 从上面的定义,我们不难看出几个关键词. 线性表:顾名思义,线性表就是数据排列成一条线的数据结构.每一个线性表只有 ...

  7. JAVA day16、17 数据结构(栈、队列、数组、链表、红黑树)

    一.什么叫数据结构? 数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带"结构"的数据元素的集合."结构"就是指数据元素之间存在的关系,分为逻辑结构 ...

  8. JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab等

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  9. JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab

    JAVA 基本数据结构(转载) --数组.链表.ArrayList.Linkedlist.hashmap.hashtab

最新文章

  1. 详解sentinel:分布式系统的流量防卫兵
  2. java发送文件_java 模拟http发送文件和参数
  3. 【AI视野·今日Robot 机器人论文速览 第三期】Tue, 8 Jun 2021
  4. Foreach In(C#)
  5. 三菱plc pwm指令_学会了这27条基本逻辑指令,你离熟练编程三菱PLC又近了一步!...
  6. SARS-CoV2_ARTIC_Illumina新冠病毒分型和突变分析
  7. 如何修改静态 IP 地址和动态 IP 地址
  8. 夺宝答题王小程序完整源码(含前端/后端以及数据库脚本)
  9. macOS Ventura 13.1 系统问题:掉电快 充电慢
  10. 快速上手!2021年字节跳动、阿里等大厂最全Android面试题,Android校招面试指南
  11. MFC对话框动态背景(定时器)
  12. 软件测试精品书单推荐指南!
  13. 网易云音乐评论内容逆向分析
  14. webpack Vue热加载配置好的确不行解决方法,限于webstorm编辑
  15. 组织效能及人均效能指标大全和计算方法
  16. 内网安全——穿透上线NgrokFrpNpsSpp
  17. 如何用ghost备份linux,Linux如何用Ghost备份Linux系统?
  18. 【电路理论】1-1 集总假设
  19. 在线markdown源码php,在线 MarkDown 编辑器 - Online MarkDown Editor - 孟坤工具箱
  20. vue播放音频以及添加插槽

热门文章

  1. centos7的网络配置
  2. 修改一个CGRect的值
  3. [转载]什么是 Design Hackathon?
  4. 高效率去掉js数组中重复项
  5. php微信段子,年度挤进前十名的微信段子,笑死了
  6. 2017 9月java答案_西安交通大学17年9月课程考试《Java语言程序设计》作业考核试题 (答案)...
  7. 西门子em235模块的功能_图文讲解PLC模拟量模块与传感器接线方法和注意事项
  8. MySQL线上备份与恢复方案
  9. scala基础之提取器extractor
  10. (74)Verilog HDL系统函数和任务:$readmemb