单链表选择排序 java,java单向循环链表
目录
表设计1.新增一条记录2.修改排序3.删除代码实现1.简单对象2.对数据按照对象排序3.输出结果
表设计
创建表` test` (`id` bigint不为空注释主键id , name varchar(50)COLLATE不为空注释名称,` next_id` bigint默认空注释指向下一个节点的主键id ,);
1. 新增一条记录
指定位置插入
参数传递前一条数据的主键id,根据id查询出该条数据的next_id记为A设置新增数据的next_id为A并保存,修改前一条数据的next_id为新增数据的主键id尾插
默认next_id为-1,表示为新增的数据,排序在最后,需要先查询出新增前最后一条数据,并将其next_id修改为新增数据的id
2. 修改排序
参数传递被移动数据,移动前,前一条数据的http://www .新浪网/(http://www .新浪网/)
被移动数据,移动后,前一条数据的http://www .新浪网/(http://www .新浪网/)
被移动数据的http://www .新浪网/(http://www .新浪网/)
查询id的C(记为id)查询A的id(记为D)修改A的next_id为B的主键D修改next_id的E为A修改next_id的D为id移动思路如下
3. 删除
参数传递前一条数据的身份证,和要删除数据的id,查询出删除数据的下一个编号记为英语字母表中第一个字母修改前一条数据的下一个编号为英语字母表中第一个字母对要删除的数据执行删除
代码实现
1. 简单对象
@Datapublic类标记{私有整数id私有字符串名称;私有整数nextId}
2. 对数据按照 nextId 排序
公共类测试{ public static void main(String[]args){//添加测试数据//这里生成的链表应为:10-40-20-30-50 list tag tags=add data();//根据每项数据的对象建立map MapInteger,Tag map=tags.stream().收藏(收藏者。tomap(tag :3360 get nextid,t-t));//-1 默认为最后一项标签最后一个标签=地图。get(-1);链表tag标签链表=新链表();taglinkedlist。添加第一个(最后一个标签)//使用递归从地图中提取数据get(lastTag.getId(),map,tagLinkedList);标记链表。foreach(系统。out : println);} private static void get(int preId,MapInteger,Tag map,linked list Tag tagList){ Tag Tag=map。get(preId);if(tag==null){ return;} tagList.addFirst(标签);get(tag.getId(),map,tagList);}私有静态list标记add data(){ list标记tagList=new ArrayList();标签标签1=新标签();标签1。setid(10);标签1。集合名称(“标记1”);标签1。设置nextid(40);标记列表。添加(标签1);标签标签4=新标签();标签4。setid(40);标签4。集合名称(“标记4”);标签4。设置nextid(20);标记列表。添加(标签4);标签Tag 2=new Tag();标签2。setid(20);标签2。集合名称(“标记2”);标签2。设置nextid(30);标记列表。添加(标签2);标签Tag 3=new Tag();标签3。setid(30);标签3。集合名称(“标记3”);标签3。设置nextid(50);标记列表。添加(标签3);标签标签5=新标签();标签5。setid(50);标签5。集合名称(“标记5”);标签5。设置nextid(-1);标记列表。添加(标签5);返回标记列表;}}
3. 输出结果
标记(id=10,name=tag1,nextId=40)标记(Id=40,name=tag4,nextId=20)标记(Id=20,name=tag2,nextId=30)标记(Id=30,name=tag3,nextId=50)标记(Id=50,name=tag5,nextId=-1)
到此这篇关于爪哇岛使用单向链表解决数据存储自定义排序问题的文章就介绍到这了,更多相关爪哇岛数据存储自定义排序内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。