2014-09-06 88 views
0

情况下用链表:建议使用LinkedList将对象发送到服务器?

private void send(Socket clientSocket, LinkedList<Person> person) { 


     try { 
      ObjectOutputStream output; 
      output = new ObjectOutputStream(clientSocket.getOutputStream()); 

      output.writeObject(person); 


     } catch (IOException ex) { 
      Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

情况下不链表:

private void send(Socket clientSocket, Person person) { 


      try { 
       ObjectOutputStream output; 
       output = new ObjectOutputStream(clientSocket.getOutputStream()); 

       output.writeObject(person); 


      } catch (IOException ex) { 
       Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); 
      } 

     } 

我已经看到了很多在这里我们使用链表源代码,但我不明白为什么。 是一回事吗?如果不是,有什么区别? 谢谢

回答

1

Person和LinkedList之间的区别在于Person只有一个人,LinkedList是一个有序的人员列表,它不止一个人。

如果不是在非常特殊的情况下,你不应该使用LinkedList,通常使用List就足够了,因为你声明了方法工作所需的接口,而不是特定的实现。

一旦你有一个带有List的方法,无论是传递LinkedList还是ArrayList或者其他符合List语义的实现,都应该在功能上等同,并且“仅”在插入,检索或内存上提供更好的性能消费。

但是,如果你在名单上做得很计算密集型操作,如循环很多,添加或删除条目很多等..

当一个服务器的呼叫使用了这些性能优势是有用的,我想想序列化LinkedList或其他实现(不管是使用java序列化还是任何其他序列化,比如json等)的性能都是最小的。

+0

编辑以反映OP编辑。 – 2014-09-06 15:12:47

+0

感谢您的回复。我知道列表和对象之间的区别。我只想知道发送列表(数组列表或链接列表)或单个对象是否存在差异。所以,这只是表现最好的问题。再次感谢 – alezz 2014-09-06 15:17:07

+0

发送一个列表可以在一次调用中向您发送更多Person实例,这就是区别。显然,如果你总是发送只有一个元素的列表,那么你可以重新考虑使用列表。 – 2014-09-06 15:19:47