首页
关于
留言
统计
友链
壁纸
影视
留言找电影
Search
1
java jdk17版本使用cglib报错问题解决
322 阅读
2
在Java中修复json数据,json格式不正确,如何在Java中修复不正确的json
118 阅读
3
Java实现双链表插入排序~渡星河全网首发
107 阅读
4
Java打印某年某月的日历~不调用函数
76 阅读
5
npm nvm 淘宝镜像最新可用
73 阅读
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
登录
/
注册
Search
标签搜索
java
java作业
恋爱
动漫
3A大作
独行月球
电影分享
总之就是非常可爱
JavaScript
office
破解
mysql
vue
java打包
跨域
tomcat解决乱码
bug解决
tomcat
vscode
渡星河
累计撰写
94
篇文章
累计收到
30
条评论
首页
栏目
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
页面
关于
留言
统计
友链
壁纸
影视
留言找电影
搜索到
93
篇与
的结果
2022-11-23
Java实现双链表插入排序~渡星河全网首发
{mtitle title="双链表实现插入排序"/}测试类package test; public class TestLinkedList { public static void main(String[] args) { LinkedList list = new LinkedList(); //在双链表尾部添加节点 list.addLast("cab"); list.addLast("bba"); list.addLast("bab"); list.addLast("abb"); list.addLast("bab"); //在双链表头部添加节点 list.addFirst("aaa"); System.out.println("--------------排序----------------"); //调用插入排序方法 list.insertSort(); //调用遍历函数 list.travers(); } }下面是插入排序的方法public void insertSort() { Node curr = first.next;//开始时从第二个节点开始往前看 while(curr != null) { Node prev = curr.prev; while(prev != null) { if (curr.data.compareTo(prev.data) < 0) {//如果当前节点小于前一个节点就继续往前查看 prev = prev.prev; } else break; } //因为在之后会改变当前节点的位置,所以先定义临时变量记录改变前的节点位置 Node cNext = curr.next; if (prev == null) {//如果找到的插入位置为头部直接删除节点后调用头插法 String val = curr.data; unlink(curr); addFirst(val); } else { //此部分逻辑完成把当前节点的前驱后后继关联上 //然后把当前节点插入到应该存在的位置,也就是prev之后。 curr.prev.next = curr.next; if (curr.next != null) { curr.next.prev = curr.prev; } curr.next = prev.next; prev.next.prev = curr; prev.next = curr; curr.prev = prev; } curr = cNext; } }方法类调式的时候使用这个/*双链表测试类*/ public class TestLinkedList { public static void main(String[] args) { //要访问双链表中的方法,就需要使用new关键字创建该双链表的对象。 LinkedList list = new LinkedList(); //String str = new String("abc"); //调用list的添加方法 list.add("dcd"); list.add("bbc"); list.add("fgh"); list.add("bbc"); list.add("abc"); //调用遍历方法 //list.traverse(); //list.addFirst("world"); //list.remove(-2); //list.insert(4, "world"); list.traverse(); list.insertSort(); list.traverse(); } } /* 实现双链表 该类里的属性和方法都没有用关键字static修饰 所以访问这些属性和方法的时候都要使用对象的引用取访问 */ class LinkedList { //头节点 Node first = null; //尾节点 Node last = null; //记录节点个数 int size = 0; /*定义添加元素的方法*/ public void add(String val) { addLast(val); } /*尾插法*/ public void addLast(String val) { //要把val添加到链表中,需要做什么? //第一步:创建节点, Node newNode = new Node(); //第二步:把值val存入节点的数据区域 newNode.data = val; //首次添加节点时,头节点和尾节点都是null. if(last == null) { //首次添加需要把头节点和尾节点的引用都移动到指向第一个节点 first = newNode; last = newNode; } else {//非首次插入节点 last.next = newNode;//让链表的末节点的next域指向新创建的节点 newNode.prev = last;//让新创建节点的prev域指向链表的末节点 last = newNode;//最后把last移动到指向新创建的节点 } size++; } /*头插法*/ public void addFirst(String val) { //要把val添加到链表中,需要做什么? //第一步:创建节点, Node newNode = new Node(); //第二步:把值val存入节点的数据区域 newNode.data = val; //首次插入值头和尾节点都是null if(first == null) { first = newNode; last = newNode; } else { newNode.next = first; first.prev = newNode; first = newNode; } size++; } /*检查位置边界*/ public void checkBoundary(int position) { if (position < 0 || position > size) throw new RuntimeException("下标过了啊。。。。。。"); } /*该方法根据指定位置返回节点*/ public Node node(int position) { //定义临时遍历记录头节点 Node x = first; //查找position位置处的节点 for (int i = 1; i < position; i++) { x = x.next; } return x; } /*解除节点的关系*/ public Node unlink(Node x){ //定义变量记录需要删除的节点 Node item = x; //记录当前节点的next; Node next = x.next; //记录当前节点的prev Node prev = x.prev; if (prev == null) { first = next; } else { prev.next = next; x.prev = null; } if (next == null) { last = prev; } else { next.prev = prev; x.next = null; } //x.data = null; size--; return item; } /*删除节点*/ public Node remove(int position) { //位置检查 checkBoundary(position); //调用方法根据位置查找节点 Node node = node(position); //解除引用并返回 return unlink(node); } /*把指定节点的数据域更新为指定的值*/ public void update(int position, String value) { //检查边界 checkBoundary(position); //查找需要更新的节点并设置新的值 node(position).data = value; } /*获取指定节点的值*/ public String get(int position) { return node(position).data; } /*指定位置插入一个节点*/ public void insert(int position, String value) { //单独处理插链表尾部 if((size + 1) == position) { addLast(value); return; } //单独处理插入链表头部 if (position == 1) { addFirst(value); return; } //查找到需要插入节点的位置 Node node = node(position); //获取当前节点的前一个节点 Node prevNode = node.prev; //创建节点 Node newNode = createNode(value); prevNode.next = newNode; newNode.prev = prevNode; newNode.next = node; node.prev = newNode; size++; } /*创建节点*/ public Node createNode(String val) { Node node = new Node(); node.data = val; return node; } /*去除重复节点*/ public void distinct() { Node one = first; int outSize = 1; while(one != null) { Node two = one.next; int count = outSize + 1; while(two != null) { if (one.data == two.data) { two = two.next; remove(count); } else { two = two.next; count++; } } outSize++; one = one.next; } } public void insertSort() { Node curr = first.next;//开始时从第二个节点开始往前看 while(curr != null) { Node prev = curr.prev; while(prev != null) { if (curr.data.compareTo(prev.data) < 0) {//如果当前节点小于前一个节点就继续往前查看 prev = prev.prev; } else break; } //因为在之后会改变当前节点的位置,所以先定义临时变量记录改变前的节点位置 Node cNext = curr.next; if (prev == null) {//如果找到的插入位置为头部直接删除节点后调用头插法 String val = curr.data; unlink(curr); addFirst(val); } else { //此部分逻辑完成把当前节点的前驱后后继关联上 //然后把当前节点插入到应该存在的位置,也就是prev之后。 curr.prev.next = curr.next; if (curr.next != null) { curr.next.prev = curr.prev; } curr.next = prev.next; prev.next.prev = curr; prev.next = curr; curr.prev = prev; } curr = cNext; } } /*遍历链表*/ public void traverse() { Node temp = first; while(temp != null) { System.out.print(temp.data + " "); temp = temp.next; } System.out.println(); } } class Node { //数据域 String data; //前驱引用 Node prev; //后继引用 Node next; }{alert type="success"}插入排序由千峰鹏哥完成{/alert}{mtitle title="运行结果"/}
2022年11月23日
107 阅读
0 评论
2 点赞
2022-11-21
Java单链表的使用
{card-default label="单链表" width="80%"}链表和数组同属于线性结构,他与数组是互补的。数组属于静态存储结构,而链表属于动态存储结构。链表是逻辑上连续的存储单元,但物理上不连续。链表的基本存储单元是节点(node),存储单元之间使用引用或指针相互链接。同一个数组只能存储同种数据类型的元素,链表也一样,同一个链表只能存储同种数据类型。链表可以为空。链表的第一个节点称为头节点,最后一个节点称为尾节点,当链表为空时,头节点和尾节点相同,都指向null。{/card-default}太懒了,不想写注释,直接给你们看老师的吧//测试类 public class TestSingleList { public static void main(String[] args) { SingleList.addTail(100); SingleList.addTail(1000); System.out.println("size : " + SingleList.size); } } //单链表数据模型类 class SingleList { //头节点 static Node first = null; //尾节点 static Node last = null; //节点数 static int size = 0; //添加-尾部 //value表示要存入节点数据域的值。 public static void addTail(int value) { //创建一个节点 Node newNode = new Node(); newNode.data = value; if (last == null) { first = newNode; last = newNode; } else { last.next = newNode; last = newNode; } size++; } //添加-头部 public static void addFirst(int value) { //创建一个节点 Node newNode = new Node(); newNode.data = value; if(first == null) { first = newNode; last = newNode; } else { newNode.next = first; first = newNode; } siez++; } //删除,position表示要删除的是第几个节点 public static void remove(int position) { //记录当前访问到了第几个节点 int count = 1; //变量指向当前节点的上一个节点 Node preCurrent = null; //定义变量指向需要查找的当前节点 Node current = first; while(current != null) { //当删除的是第一个节点时 if (position == 1) { first = first.next; current.next = null; return; } else if(position == count) { System.out.println("执行删除"); preCurrent.next = current.next; current.next = null;//断掉引用 return; } else { preCurrent = current; current = current.next; } count++; } } //更新, 把指定位置position的值更新为新的值newVal public static void update(int position, int newVal){ Node node = get(position); node.data = newVal; } //查找,按照位置访问 public static Node get(int position){ int count = 1; Node t = first; while(t != null) { if (position == count) { System.out.println(t.data); return t; } t = t.next; count++; } return null; } //查看链表中是否包含指定的值val public static void containes(int val){} //反转 public static void reverseList(){} //在指定位置插入一个节点 public static void insert(int position, int value) {} //遍历链表 public static void traverse() { //定义一个临时变量用于获取节点的数据 Node t = first; while(t != null) { System.out.println(t.data); t = t.next; } } } //节点类 class Node { int data; Node next; }
2022年11月21日
10 阅读
0 评论
1 点赞
2022-11-17
接着昨天的Array List类
public class ArrayList { //定义初始变量 static int chu = 4; //创建一个初始数组,不给值节省内存 static int[] array = null; //定义一个变量用于计算有多少元素 static int total = 0; public static void main(String[] args) { //初始化数组 initialize(); //添加数组 add(69); add(67); //add(68); //插入 insert(70,1); //删除 delete(1,2); //查找元素 System.out.println(get(2)); traverse(); System.out.println("是否有序 : " + isSorted()); System.out.println("数组大小 : " + getSize()); System.out.println("数组是否为空 : " + isEmpty()); } public static void initialize(){ //给初始数组一个值,初始化 array = new int[chu]; } //添加数组内容 public static void add(int num){ array[total]=num; total++; } //遍历数组 public static void traverse(){ for (int j : array) { System.out.print(j + "\t"); } System.out.println("\ntotal="+total); } //复制数组 public static void copy(int start,int end){ int[] temp = array; int count = 0; array = new int[(end-start)*2]; for (int i = start;i<end;i++){ array[count++]=temp[i]; } //遍历 for (int j : temp) { System.out.print(j+"\t"); } } public static void insert(int value,int location){ for (int i = total;i > location;i--){ array[i]=array[i-1]; } array[location]=value; total++; } public static void delete(int start,int end){ while(end < total) { array[start++] = array[end++]; } total = start; } public static int get(int value){ return array[value]; } //判断数组是否有序 public static boolean isSorted(){ for (int i=0;i<total;i++){ if (array[i]>array[i+1]) return false; } return true; } //扩容 public static void grow(){ if (total< array.length){ int[] tmp=array; array=new int[array.length*2]; for (int j : tmp){ array[j]=tmp[j]; } //回收内存 tmp=null; } } public static int getSize() { return total; } public static boolean isEmpty() { return total == 0; } }
2022年11月17日
18 阅读
0 评论
1 点赞
2022-11-16
手写Java中ArrayList类(初级版本)
开始写文章之前,我们先了解一下什么是ArrayList{card-default label="Java中ArrayList的作用" width="100%"}ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口{/card-default}我们写的功能就是这样的,下面我们看看代码的实现public class Testarrlist { public static void main(String[] args) { //创建对象 ArrayList arry = new ArrayList(); //使用对象中的add方法 arry.add(20); arry.add(800); arry.add(900); arry.add(800); arry.bli(); } } public class ArrayList { //初始数组值(使用static来修饰是因为我们这个是在外部创建的没在方法内) static int chu = 3; //创建数组 static int[] arr = new int[chu]; //用于计算放了多少个值进去 static int sum = 0; //开始写带参数的方法 public static void add(int a) { //如果数组无法再次添加更多的元素,那就创建一个新的数组 if(sum == arr.length){ //创建一个数组长度是原来的两倍 int[] tmp = new int[arr.length*2]; //需要把原来数组的内容给拿到tmp里面 for(int i =0;i<sum;i++){ tmp[i]=arr[i]; } //因为下方打印出来的是arr数组的内容,所以我们这边要让tmp=arr arr=tmp; } //把传入的值赋值给数组元素 arr[sum]=a; //累计当前数组中的元素有多少 sum++; } //创建一个遍历数组的方法 public static void bli(){ System.out.print("{"); for(int i = 0;i<sum;i++){ System.out.print(arr[i] +" "); } System.out.print("}"); } } {mtitle title="运行结果"/}
2022年11月16日
25 阅读
0 评论
2 点赞
2022-11-14
java基础结合-方法的使用
这次是把之前学的,稍微有点难度的代码进行一个大杂烩数组的排序数组数据更新(删除)打印梯形(自己加的)输出月份使用方法的调用import java.util.Scanner; public class test{ //mian方法进行冒泡排序 static Scanner srf = new Scanner(System.in); public static void main(String[] args){ int[] sort = new int[7]; sort[0]=45; sort[1]=23; sort[2]=21; sort[3]=15; sort[4]=99; sort[5]=12; sort[6]=78; south("排序前"); //调用函数 traverse(sort); for(int i = 0;i<sort.length-1;i++){ for(int j = 0;j<sort.length-1;j++){ if(sort[j]>sort[j+1]){ int max = sort[j]; sort[j]=sort[j+1]; sort[j+1]=max; } } } south("排序后"); //调用函数 traverse(sort); //删除第四个元素后面的元素依次往前走 int delnum = 4; for(int i = delnum;i<sort.length;i++){ sort[i-1]=sort[i]; } sort[sort.length-1]=0; south("删除后"); //调用函数 traverse(sort); //用for循环输出一个等腰梯形 // ***** // ******* // ********* // *********** //先打印出左边空白处,在打印左边梯形,打印右边三角形 south("\n打印一个等腰梯形--------------------------------------"); for(int h=1;h<=4;h++){ // 打印左边空白 for(int zk =4;zk>h;zk--){ soul(" "); } //打印左边梯形 for(int zt = 4;zt<=h+6;zt++){ soul("*"); } // 打印右边三角形 for(int yx = 1;yx<=h;yx++){ soul("*"); } south(""); } south("\n打印指定月份的日历--------------------------------------"); //获取年月 south("\n请输入年份"); int year = srf.nextInt(); south("请输入月份"); int month = srf.nextInt(); //懂的都懂 //做个判断,判断数据是否违法 if (year < 1900) { south("时间必须大于等于1900年哦"); return; } else if (month==0||month>12) { south("你没事吧,没事就吃溜溜梅"); return; } south("---------"+year+"年"+month+"月---------\n"); south("一\t二\t三\t四\t五\t六\t日"); int total = 0; //计算出从1900年到year需要的天数,不包含year那年的天数 for(int ye = 1900;ye < year;ye++){ //我们需要判断是闰年的情况 if((ye%4)==0 && (ye%100)!=0 ||(ye%400)==0){ total+=366; }else { total+=365; } } //计算月份天数 for(int yu = 1;yu<month;yu++){ if(yu == 4 || yu == 6 || yu == 9 || yu == 11){ total+=30; }else if(yu == 2){ if(pdyear(year)){ total+=29; }else{ total+=28; } }else{ total+=31; } } //计算month当月有多少天 //定义变量设置这个月天数 int day; if(month == 4 || month == 6 || month == 9 || month == 11){ day=30; }else if(month == 2){ if(pdyear(year)){ day=29; }else{ day=28; } }else{ day=31; } //总天数去与7取余计算出需要空格多少 int kon = total%7; //打印前面的空格对齐星期 for (int i = 1; i <=kon; i++) { System.out.print("\t"); } //打印出顺序的月 for (int i = 1; i <= day; i++) { if ((i+total)%7==0) { System.out.println(i); }else { System.out.print(i+"\t"); } } } //遍历打印函数 public static void traverse(int[] arr){ for (int j : arr) { System.out.print(" " + j); } } //换行输出函数 public static void south(String text){ System.out.println(text); } //不换行输出函数 public static void soul(String text){ System.out.print(text); } public static boolean pdyear(int year){ return (year % 4) == 0 && (year % 100) != 0 || (year % 400) == 0; } }{mtitle title="输出结果"/}
2022年11月14日
30 阅读
1 评论
2 点赞
1
...
17
18
19