这一节,我百度了一下,就是说一个数据hash值是一定的,当hash值经过运算后,放入节点后再放入对应的数组中,接下来运算相同的就放入同一个位置用链表连接起来,是不是这样理解
想问一下有没有老师上课用的中文的api帮助文档
是我看的顺序有问题还是我前面没学好,我咋不记得学过File呢
对上一个问题我可不可以这样理解,就是在一张表中,我要找一个人,ArrayList集合就是我知道它的名字和学号,学号是有序的,而LinkedList是我只知道它的名字,所以找人的时候,用ArrayList就很快找到,而用LinkedList就更慢,但是这就说不通它的底层源码,LinkedList底层是用了二分法,那我找人的时候怎么确定它在前面还是后面,如果是根据索引那还是矛盾的啊
LinkedList说是查询慢是因为没有索引,但是这章中的add像特定位置加元素,就是找到它的索引,然后再加元素,这不就矛盾了吗
老师,这个假设修正法,我可以理解为开始假设是对的,接下来把所有错的列出来吗
这个copyOf方法返回的是新的数组还是就是在原来的数组上扩容
/** * 创建发送消息类 */ class ClientSend extends Thread { private Socket socket; public ClientSend(Socket socket){ this.socket = socket; } @Override public void run() { this.sendMsg(); } /** * 发送消息 */ private void sendMsg(){ Scanner scanner = null; PrintWriter pw = null; try { //键盘输入 scanner = new Scanner(System.in); //创建向对方输出消息的流对象 pw = new PrintWriter(this.socket.getOutputStream()); while (true){ String msg = scanner.nextLine(); if ("exit".equals(msg)){ break; } pw.println(msg); pw.flush(); } } catch (IOException e) { e.printStackTrace(); }finally { if (pw != null){ pw.close(); } if (scanner != null){ scanner.close(); } if(this.socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } /** * 创建接收消息线程类 */ class ClientReceive extends Thread { private Socket socket; public ClientReceive(Socket socket){ this.socket = socket; } @Override public void run() { } /** * 接收消息的方法 */ private void receiveMsg(){ BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); while (true){ String msg = br.readLine(); System.out.println("他说: " +msg ); } } catch (IOException e) { e.printStackTrace(); }finally { if (br!=null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public class PointSocketClient { public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1",8888); System.out.println("连接成功"); new ClientSend(socket).start(); new ClientReceive(socket).start(); } catch (IOException e) { e.printStackTrace(); } } }
/** * 创建发送消息类 */ class Send extends Thread{ private Socket socket; public Send(Socket socket){ this.socket = socket; } @Override public void run() { this.sendMsg(); } /** * 发送消息 */ private void sendMsg(){ Scanner scanner = null; PrintWriter pw = null; try { //键盘输入 scanner = new Scanner(System.in); //创建向对方输出消息的流对象 pw = new PrintWriter(this.socket.getOutputStream()); while (true){ String msg = scanner.nextLine(); if ("exit".equals(msg)){ break; } pw.println(msg); pw.flush(); } } catch (IOException e) { e.printStackTrace(); }finally { if (pw != null){ pw.close(); } if (scanner != null){ scanner.close(); } if(this.socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } /** * 创建接收消息线程类 */ class Receive extends Thread{ private Socket socket; public Receive(Socket socket){ this.socket = socket; } @Override public void run() { this.receiveMsg(); } /** * 接收消息的方法 */ private void receiveMsg(){ BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); while (true){ String msg = br.readLine(); System.out.println("他说: " +msg ); } } catch (IOException e) { e.printStackTrace(); }finally { if (br!=null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public class PointSocketServer { public static void main(String[] args) { ServerSocket serverSocket = null; try { serverSocket =new ServerSocket(8888); System.out.println("服务器启动等待连接....."); Socket socket = serverSocket.accept(); System.out.println("连接成功"); new Send(socket).start(); new Receive(socket).start(); } catch (Exception e) { e.printStackTrace(); }finally { if (serverSocket != null){ try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
老师我这个代码只有客户端给服务端发消息的收回会输出
服务端给客户端发消息时没有反应,麻烦老师看下
package com.baizhan.test; public class MyDoubleLinkedList <E>implements MyList<E> { class Node<E>{ E item; Node<E> prev; //记录前一个节点对象 Node<E> next; //记录下一个节点对象 public Node(E item, Node<E> prev, Node<E> next) { this.item = item; this.prev = prev; this.next = next; } } private Node head; private Node tail; private int size; @Override public void add(E element) { linkLast(element); } private void linkLast(E element){ Node t=this.tail; //获取尾节点 Node<E> node=new Node<>(element,t,null); //创建节点 //将新节点定义为尾节点 this.tail=node; if(t==null){ this.head=node; }else{ t.next=node; } size++; } @Override public E get(int index) { chickIndex(index); Node<E> node =getNode(index); return node.item; } private void chickIndex(int index){ if (!(index>0 && index<size)) { throw new IndexOutOfBoundsException("Index:"+index+"size:"+size); } } private Node getNode(int index){ if(index<(this.size >>1)){ Node node=this.head; for(int i=0;i<index;i++){ node=node.next; } return node; }else{ Node node=tail; for(int i=size-1;i>index;i--){ node=node.prev; } return node; } } @Override public int size() { return size; } @Override public E remove(int index) { chickIndex(index); Node<E> node =getNode(index); E item=node.item; if(node.prev==null){ this.head=node.next; }else{ node.prev.next=node.next; } if(node.next==null){ tail=node.prev; } else { node.next.prev=node.prev; } node.prev=null; node.item=null; node.next=null; size--; return item; } public static void main(String[] args) { MyDoubleLinkedList<String > m=new MyDoubleLinkedList<>(); m.add("74"); m.add("11"); m.add("215"); m.add("237"); m.add("lierqing"); m.add("127"); System.out.println(m.size); System.out.println(m.size()); System.out.println(m.remove(0)); System.out.println(m.size); for(int i=0;i<m.size;i++){ System.out.println(m.get(i)); } } }
老师,最后为啥会出现异常啊,我找了半天没看明白
package com.baizhan.test; public class MuLinkedList1<E> implements MyList<E>{ class Node<E>{ E item; Node next; public Node(E item, Node next) { this.item = item; this.next = next; } } private Node head; private int size; @Override public void add(E element) { Node<E> node=new Node<>(element,null) ; Node tail=getTail(); if(tail==null){ head=node; }else{ tail.next=node; } size++; } private Node getTail(){ if(this.head==null){ return null; }else{ Node node=head; for(int i=0;i<size-1;i++){ if(node.next==null) break; node=node.next; } return node; } } @Override public E get(int index) { chickIndex(index); Node<E> node=getNode(index); return node.item; } public void chickIndex(int index){ if(!(index>0&&index<size)) { throw new IndexOutOfBoundsException("Index:"+index+"size"+size); } } private Node getNode(int index){ Node<E> node=head; for(int i=0;i<index;i++){ node=node.next; } return node; } @Override public int size() { return size; } @Override public E remove(int index) { chickIndex(index); Node<E> node=this.getNode(index); E item=node.item; if(this.head==node){ this.head=node.next; }else{ Node<E> temp=head; for(int i=0;i<index-1;i++){ temp=temp.next; } temp.next=node.next; node.next = null; } this.size--; return item; } public static void main(String[] args) { MuLinkedList1<String> my=new MuLinkedList1<>(); my.add("aaa"); my.add("bbb"); my.add("ccc"); my.add("ddd"); my.add("eee"); my.add("fff"); System.out.println(my.size); System.out.println(my.remove(4)); for(String a:my){ } } }
老师,为啥for each循环会出错
package com.baizhan.test; public class MuLinkedList1<E> implements MyList<E>{ class Node<E>{ E item; Node next; public Node(E item, Node next) { this.item = item; this.next = next; } } private Node head; private int size; @Override public void add(E element) { Node<E> node=new Node<>(element,null) ; Node tail=getTail(); if(tail==null){ head=node; }else{ tail.next=node; } size++; } private Node getTail(){ if(this.head==null){ return null; }else{ Node node=head; for(int i=0;i<size-1;i++){ if(node.next==null) break; node=node.next; } return node; } } @Override public E get(int index) { chickIndex(index); Node<E> node=getNode(index); return node.item; } public void chickIndex(int index){ if(!(index>0&&index<size)) { throw new IndexOutOfBoundsException("Index:"+index+"size"+size); } } private Node getNode(int index){ Node<E> node=head; for(int i=0;i<index;i++){ node=node.next; } return node; } @Override public int size() { return size; } @Override public E remove(int index) { chickIndex(index); Node<E> node=this.getNode(index); E item=node.item; if(this.head==node){ this.head==node.next; }else{ Node<E> temp=head; for(int i=0;i<index-1;i++){ temp=temp.next; } temp.next=node.next; node.next == null; } this.size--; return item; } }
老师,这两个地方为啥会报错
那如果通过命令行执行程序要怎么给定args
老师,赋值不是等号右边赋给左边吗,左边也可以赋给右边吗
MyInteger b =MyInteger. valueOf(100);
老师这个MyInteger.valueOf 是什么意思,方法的调用吗,还是什么别的固定写法。
老师,这个循环要执行index-1次,如果被删除的的元素在循环次数的中间,怎么办,还有这个循环最后得到的不是最后一个数吗,咋又成了被删除的前一个数,好乱
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637