java学习---集合框架
说到集合框架就要聊聊数据结构了,集合框架内部是有数据结构的。使用集合框架则是对数据进行增删改查的操作。
常见的数据结构有
一、 数组数据结构
数组是一片连续的数据空间
数组内存空间是连续的,内存地址指向的是数组中第一个数的内存地址。
注:数组长度一旦声明是无法改变的,且
由于数组底层是封装了指针的,所以数组的查询操作非常快。
二、动态数组
动态数组,顾名思义,长度是可变的。
实现原理如图:
增加:创建一个新的数组,长度为原数组长度
删除:创建一个长度为原数组长度
三、链表
以单链表为例:
每个节点里面都放两个数据,一个用来存数据的,一个用来存下一个节点的地址的。这样就组成了一个链式结构。
增加:先将
删除:先将要删除节点的前一个节点指向后一个节点,然后先将前一个节点的
链式结构代码如下:

public class MyLinkedList { Node head = null;//头节点 Node last = null;//尾节点 int count = 0;//记录下标 //增加数据 public void add(String s) { Node n = new Node(s); if(head == null) { head = n; last = n; }else { last.next = n; last=n; } count++; } //在指定位置插入数据 public void add(int index,String s) { int num = 0; Node node = new Node(s); Node n = head; while(num<index-1) { n=n.next; num++; } node.next = n.next; n.next = node; count++; } //根据下标获取数据 public String get(int index) { Node n = getNodeByIndex(index); return n.data; } //获取长度 public int size() { return count; } public void remove(String s) { for(int i = 0;i<size();i++) { if(getNodeByIndex(i).data.equals(s)) { remove(i); } } } //根据下标修改数据 public void set(int index , String s) { Node n1 = getNodeByIndex(index-1); Node n = new Node(s); Node n2 = getNodeByIndex(index); n1.next=n; n.next=n2.next; n2.next=null; } //根据下标移除数据 public void remove(int index) { int num = 0; Node n = head; if(head!=null){ if(index != 0 ) { while(num < index-1) { n = n.next; num++; } Node m =n.next; if(n.next!=last) { n.next = m.next; m.next = null; }else if(n.next == last){ n.next = null; } }else if(index == 0){ head = head.next; n.next=null; } count--; } } //获取节点 private Node getNodeByIndex(int index) { int num = 0; Node n = head; while(num<index) { n=n.next; num++; } if(n!=null) { return n; } return null; } //节点类 private class Node{ String data; Node next; Node (String data){ this.data=data; } @Override public String toString() { // TODO Auto-generated method stub return data; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!