会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132384个问题
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 3286楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 3287楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 3288楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 3289楼

节点1.png

节点2.png

老师,last是一个节点,那它应当包括前驱指针域,数据域,后驱指针域。之后怎么又把它赋给newNode的前驱指针域了呢?这不是相当于把三个结构的组合(前驱指针域+数据域+后驱指针域)赋给一个结构(前驱指针域)了?我这里看不明白。

JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 3290楼

我写了个乞丐版的LinkedList,主要是实现add,remove,get方法,但是remove方法一直报异常,麻烦老师看一下问题出在了哪里,以下是源码

LinkedList类

package TestLinkedList;
public class LinkedList {
 private Node first=null;
 private Node last=null;
 private int size;
 //索引返回值
 Object node(int index) {
  Node x=first;
  for(int i=0;i<index;i++) {
      x=first;
   x=x.next;
  }return x.object;
 }
 //tostring方法 
 public String toString() {
    String result="";
    //如果链表中没有根节点,直接返回空
    if(first!=null){
        Node temp = first;
        result=temp.object.toString();
        //如果已经遍历到最后一个节点,结束
        while(temp.next!=null){
         result+=","+temp.next.object.toString();
         temp=temp.next;
        }
    }
    return "LinkedList [" +result + "]";
   }
 //add方法
 public void add(Object object) {
  Node l=last;
  Node newnode=new Node(l,object,null);
  last=newnode;
  if(l==null) {
   first=newnode;
  }else {
   l.next=newnode;
  }
  size++;
 };
 //remove方法
 public void remove(Object object) {
  Node l=last;
  Node f=first;
  
  for(int i=0;i<size;i++)
   {
   if(f.equals(object)) {
   break;}
   f=f.next;
   
  }
  if(f.prv==null&&f.next!=null) {
   f.next=first;
  }else if(f.prv!=null&&f.next==null) {
   f.prv=last;
   
  }else if(f.prv!=null&&f.next!=null) {
   f.prv.next=f.next;
   f.next.prv=f.prv;
  }
  f.object=null;
  size--;
 }
 //get方法
public Object get(int index) {
 Object d=node(index);
 return d;
  
 }
 
}

Node类

package TestLinkedList;
public class Node {
 Object object;
 Node prv;
 Node next;
public  Node(Node prv,Object object,Node next) {
 this.prv=prv;
 this.object=object;
 this.next=next;
 
}
public Node() {
 
}
}

Test测试

package TestLinkedList;
public class Test {
 public static void main(String[] args) {
 LinkedList link=new LinkedList();
 //测试add
 link.add("hi");
 link.add("word");
 //测试tostring
 System.out.println(link);
 //测试get
 System.out.println(link.get(1));
 //测试remove
 link.remove("word");
 System.out.println(link);
 }
}

运行效果

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 3292楼

package com.bjsxt.server;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;



public class Request {/*请求*/
	private InputStream is;//输入流
	private String requestInfo;//请求字符串,请求方式,请求的路径,参数,协议,协议版本,请求的正文。。。
	private String method;//请求的方式
	private String url;//请求的url
	//输入框的name为key,值为value
	/*
	 *  key: username    value  :bjsxt
	 *  key:pwd          value:123
	 *  key:hobby        value   :read,ball
	 * */
	private Map<String,List<String>> parametermapValues;//参数
	private static final String CRLF="\r\n";//换行
	private static final String BLANK=" ";//空格
	//构造方法,初始化属性
	public Request() {
		parametermapValues=new HashMap<String,List<String>>();
		method="";
		url="";
		requestInfo="";
	}
	public Request(InputStream is){
		this();//调用本类无参的构造方法
		this.is=is;
		try {
			byte [] buf=new byte[20480];
			int len=this.is.read(buf);
			requestInfo=new String(buf,0,len);
		} catch (IOException e) {
			return;
		}
		//调用本类中的分解请求信息的方法
		this.parseRequestInfo();
	}
	//分解请求信息的方法
	/**
	 * 请求方式
	 * 请求路径
	 * 请求的参数
	 * 
	 */
	private void parseRequestInfo(){
		String paraString="";//用于存储请求参数
		//获取请求参数的第一行
		String firstLine=requestInfo.substring(0, requestInfo.indexOf(CRLF)).trim();//从0开始,到第一个换行的位置
		//分解出请求方式
		int index=firstLine.indexOf("/");
		this.method=firstLine.substring(0, index).trim();
		//分解url  ,get可能包含参数,也可能不包含参数post
		String urlString= firstLine.substring(index,firstLine.indexOf("HTTP/")).trim();
		//判断请求方式是GET还 是POST
		if("get".equalsIgnoreCase(this.method)){  //包含请求参数
			if (urlString.contains("?")) {
				String [] urlArray=urlString.split("\\?");
				this.url=urlArray[0];
				paraString=urlArray[1];
			}else{
				this.url=urlString;
			}
		}else{//post不包含请求参数
			this.url=urlString;
			paraString=requestInfo.substring(requestInfo.lastIndexOf(CRLF)).trim();
		}
		if (paraString.equals("")) {
			return;
		}
		//请求参数
		//System.out.println(paraString);
		
	}
	//用于测试
	/*public void show(){
		System.out.println(this.url);
		System.out.println(this.method);
	}*/
	private void parseParam(String prarString) {
		String [] token=prarString.split("&");
		for(int i=0;i<token.length;i++) {
			String keyValues=token[1];
			String []keyValue=keyValues.split("=");//username 
			if (keyValue.length==1) {
				keyValue=Arrays.copyOf(keyValue, 2);
				keyValue[1]=null;
			}
			//将表单元素的name与name对应的值存储到Map集合
			String key=keyValue[0].trim();
			String value=keyValue[1]==null?null:keyValue[1].trim();
			//放到集合中存储
			if (!parametermapValues.containsKey(key)) {
				parametermapValues.put(key, new ArrayList<String>());
				
			}
			List<String> values=parametermapValues.get(key);
			values.add(value);
		}
	}
	public static void main(String[] args) {
		Request req=new Request();
		req.parseParam("username=123&pwd=123&hobby=ball&hobby=paint");
		System.out.println(req.parametermapValues);
	}
}

image.png

得不到视频中的效果 这是为什么。?

JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 3294楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 3295楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 3297楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 3298楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637