﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-冰块+java-随笔分类-JAVA基础</title><link>http://www.blogjava.net/iceblock/category/49387.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 21 Oct 2011 09:20:51 GMT</lastBuildDate><pubDate>Fri, 21 Oct 2011 09:20:51 GMT</pubDate><ttl>60</ttl><item><title>HashMap,LinkedHashMap,TreeMap，HashTable的区别 </title><link>http://www.blogjava.net/iceblock/archive/2011/10/21/361694.html</link><dc:creator>iceblock</dc:creator><author>iceblock</author><pubDate>Fri, 21 Oct 2011 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/iceblock/archive/2011/10/21/361694.html</guid><wfw:comment>http://www.blogjava.net/iceblock/comments/361694.html</wfw:comment><comments>http://www.blogjava.net/iceblock/archive/2011/10/21/361694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iceblock/comments/commentRss/361694.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iceblock/services/trackbacks/361694.html</trackback:ping><description><![CDATA[<div><span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; text-align: left; background-color: #ffffff; ">java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap</span><br style="line-height: 25px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; text-align: left; background-color: #ffffff; " /><span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; text-align: left; background-color: #ffffff; ">Map主要用于存储健值对，根据键得到值，因此不允许键重复(重复了覆盖了),但允许值重复。<br /></span>----------------------------------------------------------------<br style="line-height: 25px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; text-align: left; background-color: #ffffff; " /><span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; text-align: left; background-color: #ffffff; ">HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值，具有很快的访问速度，遍历时，取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;<br />HashMap不支持线程的同步，即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步，可以用 Collections的synchronizedMap方法使HashMap具有同步的能力，或者使用ConcurrentHashMap。<br /></span>-----------------------------------------------------------------<br style="line-height: 25px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; text-align: left; background-color: #ffffff; " /><span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; text-align: left; background-color: #ffffff; ">Hashtable与 HashMap类似,它继承自Dictionary类，不同的是:它不允许记录的键或者值为空;它支持线程的同步，即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。<br /></span><div>-----------------------------------------------------------------</div><div>LinkedHashMap保存了记录的插入顺序，在用Iterator遍历LinkedHashMap时，先得到的记录肯定是先插入的.也可以在构造时用带参数，按照应用次数排序。在遍历的时候会比HashMap慢，不过有种情况例外，当HashMap容量很大，实际数据较少时，遍历起来可能会比LinkedHashMap慢，因为LinkedHashMap的遍历速度只和实际数据有关，和容量无关，而HashMap的遍历速度和他的容量有关。<br />-----------------------------------------------------------------<br /><div><span style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; text-align: left; background-color: #ffffff; ">TreeMap实现SortMap接口，能够把它保存的记录根据键排序,默认是按键值的升序排序，也可以指定排序的比较器，当用Iterator 遍历TreeMap时，得到的记录是排过序的。<br />------------------------------------------------------------------------------------------<br />总结：<br /></span><div>一般情况下，我们用的最多的是HashMap,HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值，具有很快的访问速度。在Map 中插入、删除和定位元素，HashMap 是最好的选择。<br />TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键，那么TreeMap会更好。<br />LinkedHashMap 是HashMap的一个子类，如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列，像连接池中可以应用。</div></div></div></div><img src ="http://www.blogjava.net/iceblock/aggbug/361694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iceblock/" target="_blank">iceblock</a> 2011-10-21 09:58 <a href="http://www.blogjava.net/iceblock/archive/2011/10/21/361694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String StringBuffer StringBuilder区别</title><link>http://www.blogjava.net/iceblock/archive/2011/10/18/361519.html</link><dc:creator>iceblock</dc:creator><author>iceblock</author><pubDate>Tue, 18 Oct 2011 05:05:00 GMT</pubDate><guid>http://www.blogjava.net/iceblock/archive/2011/10/18/361519.html</guid><wfw:comment>http://www.blogjava.net/iceblock/comments/361519.html</wfw:comment><comments>http://www.blogjava.net/iceblock/archive/2011/10/18/361519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iceblock/comments/commentRss/361519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iceblock/services/trackbacks/361519.html</trackback:ping><description><![CDATA[<div><div>String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象，然后将指针指向新的String 对象，所以经常改变内容的字符串最好不要用 String。因为每次生成对象都会对系统性能产生影响，特别当内存中无引用对象多了以后， JVM 的 GC 就会开始工作，那速度是一定会相当慢的。</div><div>-------------------------------------------------------------------------------------</div><div>StringBuffer 每次结果都会对 StringBuffer 对象本身进行操作，而不是生成新的对象，再改变对象引用。线程安全</div><div>-----------------------------------------------------------------------------------------</div><div>StringBuilder 用在字符串缓冲区被单个线程使用的时候 &nbsp; &nbsp;线程不安全<br /><br />------------------------------------------------------------------------------------------<br /><div><p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; ">1.如果要操作少量的数据用 = String</p><p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; ">2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder</p><p style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; ">3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer</p></div></div></div><img src ="http://www.blogjava.net/iceblock/aggbug/361519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iceblock/" target="_blank">iceblock</a> 2011-10-18 13:05 <a href="http://www.blogjava.net/iceblock/archive/2011/10/18/361519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>