1.java中构造方法的含义:
一个与当前类同名的方法成为构造方法。
构造方法的特点:
1、与当前类同名;
2、没有返回值;
3.一旦自定义构造方法后,系统将不再自动生成无参数的构造方法;
4.不能加void定义类型,它的无返回值与void不同,若用void定义类型,则系统不会将其认定为构造方法,即不会再需要时自动调用
构造方法的作用:
在类的实例对象刚产生时,该类中的构造方法将会被自动调用,我们可以再该构造方法中加入需要完成初始化工作的代码。
2.while(true)的含义:
无限循环,表达式一直是真的,使用break语句跳出。
3.初始化是为了给头结点一个方向。
4.二维数组的遍历:
注意:二维数组的长度就是一位数组的个数。
单链表增删改查代码:
package com;
public class Node{
Node next;
Integer id;
String name;
//初始化
public Node(Integer id,String name){
this.id=id;
this.name=name;
}
@Override
public String toString() {
return "Node{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
package com;
public class Demo{
public static void main(String[] args) {
Demo demo=new Demo();
Node one=new Node(1,"pp");
Node three=new Node(3,"mm");
Node two=new Node(2,"ll");
Node four=new Node(4,"nn");
demo.add2(one);
demo.add2(three);
demo.add2(two);
demo.add2(four);
// demo.update(four);
demo.delete(4);
demo.show();
}
private Node head=new Node(0,"");
//添加
public void add(Node node){
Node temp=head;
while(true)
{
if(temp.next==null)
{
break;
}
temp=temp.next;
}
temp.next=node;
}
//有序添加(按大小插入——遍历——temp是被插入结点的前一个结点——核心代码)
public void add2(Node node){
Node temp=head;
boolean flag=false;
while(true)
{
if(temp.next==null)
{
break; //说明temp已经在链表的最后
}
if(temp.next.id>node.id)
{
break;
}
else if(temp.next.id==node.id)
{
flag=true;
break;
}
temp=temp.next;
}
if(flag) {
System.out.println("编号已经存在,不能添加"+node.id);//说明编号存在
}
else{
node.next=temp.next;
temp.next=node;
}
}
//展示
public void show(){
if(head.next==null)
return;
Node temp=head.next;
while(true)
{
if(temp==null)
return;
System.out.println(temp);
temp=temp.next;
}
}
//根据id来修改结点
public void update(Node node){
boolean flag=false;
if(head.next==null)
return ;
Node temp=head.next;
while(true)
{
if(temp==null)
break;
if(temp.id==node.id)
{
flag=true;
break;
}
temp=temp.next;
}
if(flag)
{
temp.name=node.name;
}else{
System.out.println("没有找到");
}
}
//删除
public void delete(int id){
boolean flag=false;
if(head.next==null)
return;
Node temp=head.next;
while(true)
{
if(temp.next==null) //已经到最后
break;
if(temp.next.id==id) //找到待删除节点的前一个结点
{
flag=true;
break;
}
temp=temp.next;
}
if(flag)
{
temp.next=temp.next.next;
}else{
System.out.println("没有找到");
}
}
}
注意:
插入和删除都是要找到单链表的前一个结点。
模式基本相同。