Java链表的基本使用

2023-11-10

链表是一种根据元素节点逻辑关系排列起来的一种数据结构。利用链表可以保存多个数据,这一点类似于数组的概念,但是数组本身有一个缺点—— 数组的长度固定,不可改变,在长度固定的情况下首选的肯定是数组,但是在现实的开发之中往往要保存的内容长度是不确定的,那么此时就可以利用链表这样的结构来代替数组的使用。

链表是一种最为简单的数据结构,它的主要目的是依靠引用关系来实现多个数据的保存。

下面是定义一个简单的类用来保存节点关系,并将所有节点链接起来。

例子1:

//每一个链表实际上就是由多个节点组成的
class Node {    
	private String data; //用于保存数据
	private Node next;   //用于保存下一个节点
	
	public Node(String data){  //每一个Node类对象都必须保存有数据
		  this.data = data ;
	}
	
	public void setNext(Node next){
		  this.next = next ;
	}
	
	public Node getNext(){
		  return this.next ;
	}
	
	public String getData(){
		  return this.data ;
	}
}

public class LinkedList {
	 
	public static void main(String[] args) {
		
		//第一步:准备数据
		Node root = new Node("火车头") ;
		Node n1 = new Node("车厢A") ;
		Node n2 = new Node("车厢B") ;

		// 链接节点
		root.setNext(n1);
		n1.setNext(n2);
		
		//第二步:取出所有数据
		Node currentNode = root ;  //从当前根节点开始读取
		while( currentNode !=  null){
			System.out.println(currentNode.getData()) ;
			//将下一个节点设置为当前节点s
			currentNode = currentNode.getNext() ;
		}
 }
}

运行:

火车头
车厢A
车厢B

例子2:
在进行链表操作的时候,首先需要的是一个根节点(第一个节点即为根节点),之后每一个节点的引用都保存在上一节点的next属性之中,而在进行输出的时候也应该按照节点的先后顺序,一个一个取得每一个节点所包装的数据。

public class LinkedList {

	public static void main(String[] args) {
	 Link link = new Link() ;
	 link.add("hello");   //增加节点
	 link.add("world");
	 link.add("wwww");
	 link.print();     //打印数据		
	}	
}

//每一个链表实际上就是由多个节点组成的
class Node { 
	private String data; // 用于保存数据
	private Node next; // 用于保存下一个节点
	
	public Node(String data) {  // 每一个Node类对象都必须保存有响应的数据
		this.data = data;
	}

	public void setNext(Node next) {
		this.next = next;
	}

	public Node getNext() {
		return this.next;
	}

	public String getData() {
		return this.data;
	}

	// 实现节点的添加:
	// 第一次调用(Link):this代表Link.root
	// 第二次调用(Node):this代表Link.root.next
	// 第三次调用(Node):this代表Link.root.next.next
	public void addNode(Node oldNode,Node newNode) {	
		System.out.println("now:"+oldNode);
		if (this.next == null) {   // 保存新节点
			this.next = newNode; 
		} else {                 // 当前节点后面还有节点			
			this.next.addNode(this.next,newNode);  // 当前节点的下一个节点继续保存,这里采用的是递归添加节点
		}
		System.out.println(oldNode+"=>"+this.next);
	}

	// 第一次调用(Link):this代表Link.root
	// 第二次调用(Node):this代表Link.root.next
	// 第三次调用(Node):this代表Link.root.next.next
	public void printNode() {
		System.out.println("pp:"+this.data);// 输出当前数据
		if (this.next != null) {      // 如果还有下一个节点,输出下一节点
			this.next.printNode();   // 递归打印节点,注意这里的this.next中的this指代
		}
	}
}


// 链表增加节点,输出节点数据
class Link {
	
	private Node root; //新建根节点

	public void add (String data){
		  Node newNode = new Node(data);  //链表中新增节点类对象	  
		  if(this.root == null ){         // 如果链表还没有任何节点,就添加第一个节点作为根节点
			  this.root = newNode;   
			  System.out.println("root:"+this.root);
		  }else{ 
			  System.out.println("new:"+newNode);
			  this.root.addNode(this.root,newNode);  //从根节点节点新链接一个节点
		  }
	}
	
	//输出当前节点数据
	public void print(){
		  if( this.root != null ){  
			  this.root.printNode();
		  }
	}

}

运行:

root:test.Node@7852e922
new:test.Node@4e25154f
now:test.Node@7852e922
test.Node@7852e922=>test.Node@4e25154f
new:test.Node@70dea4e
now:test.Node@7852e922
now:test.Node@4e25154f
test.Node@4e25154f=>test.Node@70dea4e
test.Node@7852e922=>test.Node@4e25154f
pp:hello
pp:world
pp:wwww

例子3:

关键是构造一个类,里面包含一个指向下一个元素的对象(指向下一个元素的指针)

public class LinkedList{
	
	public static void main(String[] args){

        MyLinkedList linkedList = new MyLinkedList();
        System.out.println("-------start-------");
        System.out.println("ll:"+linkedList.listEm());
        
        for (int i=0;i<5;i++){   //新建链表
            linkedList.add(i+1);
        }
        System.out.println("mm:"+linkedList.listEm());  //打印链表
        
        for(int i=0;i<5;i++){  //删除链表
            System.out.println("remove:"+linkedList.remove());
        }

        System.out.println("kk:"+linkedList.listEm());
        System.out.println("-------end-------");
    }
}

class Node<T> {
    Node<T> next;
    T element;
    public Node( Node<T> next, T element){
        this.next = next;
        this.element = element;
    }
}


class MyLinkedList<T> {
	
	private int size ;	
    Node<T> last;     //指向list中最后一个元素       
    Node<T> first;    //指向list中第一个元素  
    Node<T> currRead; //指向当前读取的元素   
 
    // 默认构造函数
    public MyLinkedList(){   
        this.size = 0;
        this.last =  new Node(null,-1);
        this.first = last;
        this.currRead = first;
    }

    
    //往链表中添加数据(队尾添加数据)     
    public void add(T element){
        Node<T> newNode = new Node<T>(null,element);
        this.last.next = newNode;
        this.last = newNode;  // 引用平移
        if(size == 0){
            this.first = newNode;
        }
        size ++;
        
    }

    
    //移除链表中的数据(队头移除)
    public T remove(){
        if(size == 0){
            System.out.println("empty list ");
            this.currRead = this.first;
            return null;
        }
        T result = this.first.element;
        this.first = this.first.next;
        this.currRead = this.first;
        size--;
        return result;
    }

   //获取队列中的元素
    public T get(){
        if(this.currRead.next == null){
            this.setReadAgain();
            return this.currRead.element;
        }
        T result = this.currRead.element;
        this.currRead = this.currRead.next;
        return result;
    }

   //再次从头开始读取数据
    public void setReadAgain() {
        this.currRead = this.first;
    }

    public String listEm(){
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<size;i++){
           T ele = this.get();
           sb.append(this.currRead.element + "-->");
        }
        return sb.toString();
    }

    //获取队列大小
    public int getSize(){
        return this.size;
    }

   
}
   

运行:

-------start-------
ll:
mm:1-->2-->3-->4-->5-->
remove:1
remove:2
remove:3
remove:4
remove:5
kk:
-------end-------

例四:

public class LinkedList {

public static void main(String [] args){ 

	Link l=new Link();  
    mytype[] la;  
    mytype dsome=new mytype("韩敏","dsome",21);  
    mytype shao=new mytype("邵晓","john",45);  
    mytype hua=new mytype("华晓风","jam",46);  
    mytype duo=new mytype("余小风","duo",1000);  
    mytype wang=new mytype("王秋","jack",21);  
    mytype shi=new mytype("韩寒","bob",3000);  
    mytype yu=new mytype("于冬","keven",30); 
	
	l.add(dsome);//测试增加节点  
    l.add(shao);  
    l.add(hua);  
    l.add(wang);  
    l.add(shi);  
    l.add(duo);  
    l.add(yu);  
	
    System.out.println("链表长度:"+l.length());//链表长度
 
    la=l.toArray();  
    for(int i=0;i<la.length;i++){  
		 System.out.println(la[i].getInfo());  
		 }  
    
    System.out.println("是否包含余小风:"+l.contains(duo)+"\n");  
    System.out.println("删除余小风后\n");  
    l.remove(duo);  
    la=l.toArray();  
    for(int i=0;i<la.length;i++){    //转化为数组之后输出  
		 System.out.println(la[i].getInfo());  
	}    
    
	System.out.println("\n利用索引方法输出全部数据");  
    for(int i=0;i<l.length();i++){  
       System.out.println(l.get(i).getInfo());  
    }    
	System.out.println("是否包含余小风:"+l.contains(duo)+"\n");  
	l.clean();  
    System.out.println("执行清空操作后链表长度: "+l.length()+"\t是否为空链表:"+l.isEmpty());  
	}
}




class Link {

	//内部类  
	private class Node{   
		
		private Node next;  
		private mytype data;  
		
		public Node(mytype data){  
		      this.data=data;  
		 }  
		
		public void addNode(Node newNode){  //增加节点  
		      if(this.next==null){  
		        this.next=newNode;   // 指向新的节点
		      }else{  
		        this.next.addNode(newNode);    // 递归调用是为了让next引用指向新的节点
		      }  
		    }  
	
	    public mytype getNode(int index){//按照角标返回数据  
	
	      if(index==Link.this.foot++){  
	        return this.data;  
	      }else{  
	        return this.next.getNode(index);  
	      }  
	    }  
	
	    public boolean iscontain(mytype data){//判断是否含有该数据  
	      if(this.data.equals(data)){  
	        return true;  
	      }else{  
	        if(this.next!=null){  
	          return this.next.iscontain(data);  
	        }else{  
	          return false;  
	        }  
	      }  
	    }  
	
	    public void removeNode(Node previous,mytype data){  //删除节点  
	      if(this.data.equals(data)){    //this:下一个节点B
	        previous.next=this.next;    // this.next:节点B的下一个节点C,previous:节点A
	
	      }else{  
	        this.next.removeNode(this,data);  //注意这里的this.next和this的区别:this.next是下一个节点B,this是当前节点A
	      }  
	    }  
	
	
	    public void toArrayNode(){  //转化数组  
	        Link.this.Larray[Link.this.foot ++]=this.data;  //每个节点的数据添加到一个mytype []中
	        if(this.next!=null){  
	          this.next.toArrayNode();  
	        }  
	      }   
}

//内部类定义完毕  
private Node root;  
private int count=0;  
private int foot;  
private mytype [] Larray;

 public void add(mytype data){   //增加节点  
    if(data==null){  
      System.out.print("增加数据失败,数据为空");//测试用  
      return;  
    }  
    
    Node newNode=new Node(data);  //新建节点
    
    if(this.root==null){  
      this.root=newNode;  
      this.count++;  
    }else{  
      this.root.addNode(newNode);  
      this.count++;  
    }  
  }  

  public int length(){//链表长度  
    return this.count;  
  }  

  public boolean isEmpty(){//是否为空链表  
    if(this.count==0)return true;  
    else return false;  
  }  

  public void clean(){//清空链表  
    this.root=null;  
    this.count=0;  
  }  

  public mytype get(int index){//索引返回节点所存的数据  
        if(index>=this.count||index<0){  
          System.out.print("越界错误");//测试用  
          return null;  
        }else{  
          this.foot=0;  
          return this.root.getNode(index);  
        }  
      }  

   public boolean contains(mytype data){  //判断链表数据是否含data  
        if(data==null)  
          return false;
        else
          return this.root.iscontain(data);  
      }  

    public void remove(mytype data){  //删除指定数据节点  
        if(this.contains(data)){  
	          if(this.root.data.equals(data)){  
	            this.root=this.root.next;  
	            this.count--;     
	          }  
	          else{  
	            this.count--;  
	            this.root.next.removeNode(root,data);  
	          }  
        }else{  
          System.out.print("删除错误");//测试用          
        }  
      }  

      public mytype[] toArray(){  //把链表转化成对象数组  
        if(this.count==0){  
          return null;  
        }  
          this.foot=0;  
          this.Larray=new mytype [this.count];  
          this.root.toArrayNode();  
          return this.Larray;         
      }         
}


class mytype {

	private String name;  
	private String people;  
	private int age;
	
	public mytype(String name,String people,int age){//链表中的数据(可自定义)  
	    this.name=name;  
	    this.people=people;  
	    this.age=age;  
	  }  
	
    public boolean equals(mytype data){//判断数据是否相同  
	    if(this==data){  
	      return true;  
	    }  
	    if(data==null){  
	      return false;  
	    }  
	    if(this.name.equals(data.name)&&this.people.equals(data.people)&&this.age==data.age){  
	      return true;  
	    }else{  
	      return false;  
	    }  
	  }
    
	public String getName() {
	    return name;
	}
	
	public void setName(String name) {
	    this.name = name;
	}
	
	public String getPeople() {
	    return people;
	}
	
	public void setPeople(String people) {
	    this.people = people;
	}
	
	public int getAge() {
	    return age;
	}
	
	public void setAge(int age) {
	    this.age = age;
	} 
	
	public String getInfo(){  
	    return "名字 :"+this.name+"\n"+  
	       "人物 :"+this.people+"\n"+  
	       "年龄 :"+this.age;  
	  }     
}


运行:

链表长度:7
名字 :韩敏
人物 :dsome
年龄 :21
名字 :邵晓
人物 :john
年龄 :45
名字 :华晓风
人物 :jam
年龄 :46
名字 :王秋
人物 :jack
年龄 :21
名字 :韩寒
人物 :bob
年龄 :3000
名字 :余小风
人物 :duo
年龄 :1000
名字 :于冬
人物 :keven
年龄 :30
是否包含余小风:true

删除多余后

名字 :韩敏
人物 :dsome
年龄 :21
名字 :邵晓
人物 :john
年龄 :45
名字 :华晓风
人物 :jam
年龄 :46
名字 :王秋
人物 :jack
年龄 :21
名字 :韩寒
人物 :bob
年龄 :3000
名字 :于冬
人物 :keven
年龄 :30

利用索引方法输出全部数据
名字 :韩敏
人物 :dsome
年龄 :21
名字 :邵晓
人物 :john
年龄 :45
名字 :华晓风
人物 :jam
年龄 :46
名字 :王秋
人物 :jack
年龄 :21
名字 :韩寒
人物 :bob
年龄 :3000
名字 :于冬
人物 :keven
年龄 :30
是否包含多余:false

执行清空操作后链表长度: 0	是否为空链表:true

参考:
https://blog.csdn.net/qq_37199582/article/details/79244657
https://blog.csdn.net/google_huchun/article/details/52824024

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java链表的基本使用 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • s1.1024gc.net/bbs/index.php,1.12.2游戏崩溃/_ \,那位大神解答一下

    1 12 2游戏崩溃 那位大神解答一下 1 12 2游戏崩溃的log 19 26 12 main INFO LaunchWrapper Loading tweak class name net minecraftforge fml comm
  • 【数据治理】数据中台:OneData之One ID中用户体系ID-Mapping

    在OneData 体系中 OneID 指统一数据萃取 是一套解决数据孤岛问题的思想和方法 数据孤岛是企业发展到一定阶段后普遍遇到的问题 各个部门 业务 产品 各自定义和存储其数据 使得这些数据间难以关联 变成孤岛一般的存在 OneID的做法
  • react输入框监听获取值,写入state自动一一对应

    onChange v gt this handlechange username v handlechange key val console log key val target value this setState key val t
  • JAVA之AES加密数据

    AES简介 高级加密标准 为最常见的对称加密算法 微信小程序加密传输就是用这个加密算法的 对称加密算法也就是加密和解密用相同的密钥 具体的加密流程如下图 为此以Java封装了一个utils 即可轻松使用 步骤一 需要定义一个静态密钥k ke
  • 获取时间段:本周、本月、本年

    case 本周内 DateTime retStartDay DateTime Now Date AddDays int DateTime Now DayOfWeek 1 DateTime retEndDay DateTime Now Dat
  • arp协议属于哪一层_OSI各个分层分别负责哪些功能?有哪些主要协议?涉及到哪些设备?...

    应用层 应用层主要是负责一些顶层协议的工作 主要包括数据封装协议 动态分配内网IP地址以及DNS域名解析 在这一层中主要是浏览器或应用程序等组件参与了这些工作 为了保证在不同平台或不同组件中规范和标准化各项工作流程 应用层涉及了以下协议 首
  • 如何 在 Mac OS X 里通过命令行获取 CPU 信息

    本文转载至 http osxdaily com 2011 07 15 get cpu info via command line in mac os x 转载说明 由于 Mac OS X不像Linux 它没有 proc系统 在网上找到下面一
  • 把整数转换成2的n次方的和数组

    为什么80 的码农都做不了架构师 gt gt gt 大概这样 125 gt 1 4 8 16 32 64 写几种实现 Ruby 2 3 1 022 gt 125 to s 2 reverse chars map with index b i
  • Github清除历史记录的方法

    GitHub历史提交记录累计到一定程度以后 就很麻烦 体积大下载不便 压缩也慢 这时候就想永久性地删除掉没什么卵用的历史commit记录 但还要保留stars forks issues tags等重要信息 因此不能删掉仓库重建一份 而要创建
  • windows10安装opencv4.5.4,搭配vs2017

    windows10安装opencv4 5 4 搭配vs2017 1 下载opencv安装包 2 安装opencv 2 设置环境变量 3 在visual studio 2017中配置opencv 3 1 创建项目 3 2 配置 VC 目录 包
  • CSMA/CD与CSMA/CA

    对照无线网络 有线网络的集线器和中继器设计中 採用了CSMA CD技术 该技术早期是用来解决有线网络中 共享介质下的多路网络接入问题 该技术仍然在当今的10M 100M半双工网络中使用 在更高的带宽情况下 比方千M网络 则採用全双工技术以取
  • 如何压缩图片大小?图片压缩到200k以下跟我学

    相信许多人在日常生活中都会遇到图片过大导致无法上传或发送的问题 这时候 如何有效地压缩图片大小就成了我们的必备技能 今天 我将为大家介绍三种方法 帮助大家轻松压缩图片大小 一般来说 我们希望在不损失太多图片质量的情况下 尽可能地减小图片的大
  • 滑动窗口系列4-Leetcode322题零钱兑换-限制张数-暴力递归到动态规划再到滑动窗口

    这个题目是Leecode322的变种 322原题如下 我们这里的变化是把硬币变成可以重复的 并且只有coins数组中给出的这么多的金币 也就是说有数量限制 package dataStructure leecode practice imp
  • 虚拟现实下的手势识别综述

    虚拟现实下的手势识别综述 目录 虚拟现实下的手势识别综述 摘要 关键词 1 引言 2 国内外研究现状 3 手势识别的关键技术 3 1手势分割 3 2手势建模 3 3手势识别 3 4特征提取 4 存在的问题及发展趋势 5 结论 参考文献 摘要
  • js list 根据id 取不重复的数据,出现重复的完全剔除

    可以使用Set数据结构来实现根据id取不重复的数据 并剔除重复的数据 假设有一个包含多个对象的数组arr 每个对象都有一个id属性 你可以按照以下步骤进行操作 创建一个空的Set对象 用于存储不重复的id 使用forEach 方法遍历数组a
  • QT入门Buttons之QPushButton

    目录 一 界面布局介绍 1 布局器中的位置及使用 2 控件的界面属性 3 常用基本属性介绍 3 1控件名称 3 2控件大小属性 3 3按钮上的文字设置 3 4设置按钮的样式 二 属性功能介绍 1 常用方法介绍 2 基本信号介绍 三 Demo
  • servlet 会话_在Servlet中管理会话

    servlet 会话 We all know that HTTP is a stateless protocol All requests and responses are independent But sometimes you ne
  • CentOS7创建新用户

    使用root账号登录 输入新增用户的命令 XXX 指定自己新增的用户名 root localhost adduser XXX 给新增的用户名设置密码 XXX 为刚才自己设置的用户名 root localhost passwd XXX 给新用
  • PHP学习线路图

    PHP学习线路图 PHP教程 PHP教程 PHP简介 PHP环境设置 PHP语法概述 PHP变量类型 PHP常量类型 PHP运算符类型 PHP 条件语句 PHP循环语句 PHP数组 PHP字符串操作 PHP Web概念 PHP的GET和PO
  • Java链表的基本使用

    链表是一种根据元素节点逻辑关系排列起来的一种数据结构 利用链表可以保存多个数据 这一点类似于数组的概念 但是数组本身有一个缺点 数组的长度固定 不可改变 在长度固定的情况下首选的肯定是数组 但是在现实的开发之中往往要保存的内容长度是不确定的