﻿<?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-J2EE  学习-文章分类-j2se</title><link>http://www.blogjava.net/supersalor/category/41094.html</link><description>java    struts1、struts2 spring  hibernate freemarker  ajax  fckeditor   Mysql MSSQL ORACLE DB2 Websphere  jboss </description><language>zh-cn</language><lastBuildDate>Wed, 29 Jul 2009 14:55:22 GMT</lastBuildDate><pubDate>Wed, 29 Jul 2009 14:55:22 GMT</pubDate><ttl>60</ttl><item><title>java的Collection和Map详解</title><link>http://www.blogjava.net/supersalor/articles/288970.html</link><dc:creator>李峰</dc:creator><author>李峰</author><pubDate>Wed, 29 Jul 2009 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/supersalor/articles/288970.html</guid><wfw:comment>http://www.blogjava.net/supersalor/comments/288970.html</wfw:comment><comments>http://www.blogjava.net/supersalor/articles/288970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supersalor/comments/commentRss/288970.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supersalor/services/trackbacks/288970.html</trackback:ping><description><![CDATA[
		<p>
				<br />Collection与Map的类继承图如下：<br /><br />Collection  <br />├List  <br />│├LinkedList  <br />│├ArrayList  <br />│└Vector  <br />│　└Stack  <br />└Set <br />    HashSet<br />    TreeSet  <br />  <br />Map  <br />├Hashtable  <br />├HashMap  <br />└WeakHashMap  <br /><br /><br /><br />Collection接口  <br />　　Collection是最基本的集合接口，一个Collection代表一组Object，即Collection的元素（Elements）。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java  SDK不提供直接继承自Collection的类，Java  SDK提供的类都是继承自Collection的“子接口”如List和Set。  <br />　　所有实现Collection接口的类都必须提供两个标准的构造函数：无参数的构造函数用于创建一个空的Collection，有一个Collection参数的构造函数用于创建一个新的Collection，这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。  <br />　　如何遍历Collection中的每一个元素？不论Collection的实际类型如何，它都支持一个iterator()的方法，该方法返回一个迭代子，使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下：  <br />　　　　Iterator  it  =  collection.iterator();  //  获得一个迭代子  <br />　　　　while(it.hasNext())  {  <br />　　　　　　Object  obj  =  it.next();  //  得到下一个元素  <br />　　　　}  <br />　　由Collection接口派生的两个接口是List和Set。  <br /> <br />List接口  <br />　　List是有序的Collection，使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引（元素在List中的位置，类似于数组下标）来访问List中的元素，这类似于Java的数组。  <br />和下面要提到的Set不同，List允许有相同的元素。  <br />　　除了具有Collection接口必备的iterator()方法外，List还提供一个listIterator()方法，返回一个ListIterator接口，和标准的Iterator接口相比，ListIterator多了一些add()之类的方法，允许添加，删除，设定元素，还能向前或向后遍历。  <br />　　实现List接口的常用类有LinkedList，ArrayList，Vector和Stack。  <br /> <br />LinkedList类  <br />　　LinkedList实现了List接口，允许null元素。此外LinkedList提供额外的get，remove，insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈（stack），队列（queue）或双向队列（deque）。  <br />　　注意LinkedList没有同步方法。如果多个线程同时访问一个List，则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List：  <br />　　　　List  list  =  Collections.synchronizedList(new  LinkedList(...));  <br /> <br />ArrayList类  <br />　　ArrayList实现了可变大小的数组。它允许所有元素，包括null。ArrayList没有同步。  <br />size，isEmpty，get，set方法运行时间为常数。但是add方法开销为分摊的常数，添加n个元素需要O(n)的时间。其他的方法运行时间为线性。  <br />　　每个ArrayList实例都有一个容量（Capacity），即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加，但是增长算法并没有定义。当需要插入大量元素时，在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。  <br />　　和LinkedList一样，ArrayList也是非同步的（unsynchronized）。  <br /> <br />Vector类  <br />　　Vector非常类似ArrayList，但是Vector是同步的。由Vector创建的Iterator，虽然和ArrayList创建的Iterator是同一接口，但是，因为Vector是同步的，当一个Iterator被创建而且正在被使用，另一个线程改变了Vector的状态（例如，添加或删除了一些元素），这时调用Iterator的方法时将抛出ConcurrentModificationException，因此必须捕获该异常。  <br /> <br />Stack  类  <br />　　Stack继承自Vector，实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法，还有peek方法得到栈顶的元素，empty方法测试堆栈是否为空，search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。  <br /> <br />Set接口  <br />　　Set是一种不包含重复的元素的Collection，即任意的两个元素e1和e2都有e1.equals(e2)=false，Set最多有一个null元素。  <br />　　很明显，Set的构造函数有一个约束条件，传入的Collection参数不能包含重复的元素。  <br />　　请注意：必须小心操作可变对象（Mutable  Object）。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。  <br />     HashSet 是哈希表实现的,HashSet中的数据是无序的，可以放入null，但只能放入一个null，两者中的值都不能重复，就如数据库中唯一约束 ,同时 ，HashSet要求放入的对象必须实现HashCode()方法，放入的对象，是以hashcode码作为标识的，而具有相同内容的String对象，hashcode是一样，所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例。<br />      TreeSet 是二差树实现的,Treeset中的数据是自动排好序的，不允许放入null值。排序主要通过  重写Comparator方法或者实现Comparable接口<br />    a. Comparator可以在创建TreeMap时指定<br />   b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.<br /><br /> <br />Map接口  <br />　　请注意，Map没有继承Collection接口，Map提供key到value的映射。一个Map中不能包含相同的key，每个key只能映射一个value。Map接口提供3种集合的视图，Map的内容可以被当作一组key集合，一组value集合，或者一组key-value映射。  <br /> <br />Hashtable类  <br />　　Hashtable继承Map接口，实现一个key-value映射的哈希表。任何非空（non-null）的对象都可作为key或者value。  <br />　　添加数据使用put(key,  value)，取出数据使用get(key)，这两个基本操作的时间开销为常数。  <br />Hashtable通过initial  capacity和load  factor两个参数调整性能。通常缺省的load  factor  0.75较好地实现了时间和空间的均衡。增大load  factor可以节省空间但相应的查找时间将增大，这会影响像get和put这样的操作。  <br />使用Hashtable的简单示例如下，将1，2，3放到Hashtable中，他们的key分别是”one”，”two”，”three”：  <br />　　　　Hashtable  numbers  =  new  Hashtable();  <br />　　　　numbers.put(“one”,  new  Integer(1));  <br />　　　　numbers.put(“two”,  new  Integer(2));  <br />　　　　numbers.put(“three”,  new  Integer(3));  <br />　　要取出一个数，比如2，用相应的key：  <br />　　　　Integer  n  =  (Integer)numbers.get(“two”);  <br />　　　　System.out.println(“two  =  ”  +  n);  <br />　　由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置，因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object，如果你用自定义的类当作key的话，要相当小心，按照散列函数的定义，如果两个对象相同，即obj1.equals(obj2)=true，则它们的hashCode必须相同，但如果两个对象不同，则它们的hashCode不一定不同，如果两个不同对象的hashCode相同，这种现象称为冲突，冲突会导致操作哈希表的时间开销增大，所以尽量定义好的hashCode()方法，能加快哈希表的操作。  <br />　　如果相同的对象有不同的hashCode，对哈希表的操作会出现意想不到的结果（期待的get方法返回null），要避免这种问题，只需要牢记一条：要同时复写equals方法和hashCode方法，而不要只写其中一个。  <br />　　Hashtable是同步的。  <br /> <br />HashMap类  <br />　　HashMap和Hashtable类似，不同之处在于HashMap是非同步的，并且允许null，即null  value和null  key。，但是将HashMap视为Collection时（values()方法可返回Collection），其迭代子操作时间开销和HashMap的容量成比例。因此，如果迭代操作的性能相当重要的话，不要将HashMap的初始化容量设得过高，或者load  factor过低。  <br /> <br />WeakHashMap类  <br />　　WeakHashMap是一种改进的HashMap，它对key实行“弱引用”，如果一个key不再被外部所引用，那么该key可以被GC回收。  <br /> <br />总结  <br />　　如果涉及到堆栈，队列等操作，应该考虑用List，对于需要快速插入，删除元素，应该使用LinkedList，如果需要快速随机访问元素，应该使用ArrayList。</p>
		<p>文章出处：<a href="http://www.diybl.com/course/3_program/java/javajs/2007917/71621.html">http://www.diybl.com/course/3_program/java/javajs/2007917/71621.html</a></p>
<img src ="http://www.blogjava.net/supersalor/aggbug/288970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supersalor/" target="_blank">李峰</a> 2009-07-29 22:24 <a href="http://www.blogjava.net/supersalor/articles/288970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中集合 Collection 类学习 总结</title><link>http://www.blogjava.net/supersalor/articles/288969.html</link><dc:creator>李峰</dc:creator><author>李峰</author><pubDate>Wed, 29 Jul 2009 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/supersalor/articles/288969.html</guid><wfw:comment>http://www.blogjava.net/supersalor/comments/288969.html</wfw:comment><comments>http://www.blogjava.net/supersalor/articles/288969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supersalor/comments/commentRss/288969.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supersalor/services/trackbacks/288969.html</trackback:ping><description><![CDATA[
		<br />java中有个<font color="#ffffff"><font style="BACKGROUND-COLOR: #ffffff"><span class="hilite1"><font color="#000000">java</font></span>.</font></font>util.Collections集合类，
<dl><dt></dt><pre>public class <b>Collections</b><dt>extends <a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/Object.html">Object</a></dt></pre></dl><pre></pre><p>此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法，即“包装器”，包装器返回由指定 collection 支持的新 collection，以及少数其他内容。 
</p><p>如果为此类的方法所提供的 collection 或类对象为 null，则这些方法都会抛出 <tt>NullPointerException</tt>。<br /><br />1.概述<br />    <span class="hilite1"><font style="BACKGROUND-COLOR: #ffffff">java</font></span>.util.Collections 中有很多有用的方法：排序，混排，反转，替换，拷贝，返回最小元素，返回最大元素等等。<br />2.具体操作：<br />  1) 排序(Sort) <br />使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的 <br />double array[] = {112, 111, 23, 456, 231 }; <br />for (int i = 0; i &lt; array.length; i++) { <br />list.add(new Double(array[i])); <br />} <br />Collections.sort(list); <br />for (int i = 0; i &lt; array.length; i++) { <br />   System.out.println(li.get(i)); <br />}  <br />//结果：112,111,23,456,231 <br />2) 混排（Shuffling） <br />混排算法所做的正好与 sort 相反: 它打乱在一个 List 中可能有的任何排列的踪迹。也就是说，基于随机源的输入重排该 List, 这样的排列具有相同的可能性（假设随机源是公正的）。这个算法在实现一个碰运气的游戏中是非常有用的。例如，它可被用来混排代表一副牌的 Card 对象的一个 List 。另外，在生成测试案例时，它也是十分有用的。 <br />Collections.Shuffling(list) <br />double array[] = {112, 111, 23, 456, 231 }; <br />for (int i = 0; i &lt; array.length; i++) { <br />list.add(new Double(array[i])); <br />} <br />Collections.shuffle(list); <br />for (int i = 0; i &lt; array.length; i++) { <br />   System.out.println(li.get(i)); <br />} <br />//结果：112,111,23,456,231 <br />3) 反转(Reverse) <br />       使用Reverse方法可以根据元素的自然顺序 对指定列表按降序进行排 <br />序。 <br />Collections.reverse(list) <br />double array[] = {112, 111, 23, 456, 231 }; <br />for (int i = 0; i &lt; array.length; i++) { <br />list.add(new Double(array[i])); <br />} <br />Collections. reverse (list); <br />for (int i = 0; i &lt; array.length; i++) { <br />   System.out.println(li.get(i)); <br />} <br />//结果：231,456,23,111,112 <br />4) 替换所以的元素(Fill) <br />使用指定元素替换指定列表中的所有元素。 <br />String str[] = {"dd","aa","bb","cc","ee"}; <br />for(int j=0;j&lt;str.length;j++){ <br />li.add(new String(str[j])); <br />} <br />Collections.fill(li,"aaa"); <br />for (int i = 0; i &lt; li.size(); i++) { <br />System.out.println("list[" + i + "]=" + li.get(i)); <br /><br />} <br />//结果：aaa,aaa,aaa,aaa,aaa <br /><br />5) 拷贝(Copy) <br />用两个参数，一个目标 List 和一个源 List, 将源的元素拷贝到目标，并覆盖它的内容。目标 List 至少与源一样长。如果它更长，则在目标 List 中的剩余元素不受影响。 <br />Collections.copy(list,li): 后面一个参数是目标列表 ,前一个是源列表 <br />double array[] = {112, 111, 23, 456, 231 }; <br />List list = new ArrayList(); <br />List li = new ArrayList(); <br />for (int i = 0; i &lt; array.length; i++) { <br />list.add(new Double(array[i])); <br />} <br />double arr[] = {1131,333}; <br />String str[] = {"dd","aa","bb","cc","ee"}; <br />for(int j=0;j&lt;arr.length;j++){ <br />li.add(new Double(arr[j])); <br />} <br />Collections.copy(list,li); <br />for (int i = 0; i &lt;list.size(); i++) { <br />System.out.println("list[" + i + "]=" + list.get(i)); <br />} <br />//结果：1131,333,23,456,231 <br />6) 返回Collections中最小元素(min) <br />根据指定比较器产生的顺序，返回给定 <span class="hilite2"><font style="BACKGROUND-COLOR: #55ff55">collection</font></span> 的最小元素。<span class="hilite2"><font style="BACKGROUND-COLOR: #55ff55">collection</font></span> 中的所有元素都必须是通过指定比较器可相互比较的 <br />Collections.min(list) <br />double array[] = {112, 111, 23, 456, 231 }; <br />List list = new ArrayList(); <br />for (int i = 0; i &lt; array.length; i++) { <br />list.add(new Double(array[i])); <br />} <br />Collections.min(list); <br />for (int i = 0; i &lt;list.size(); i++) { <br />System.out.println("list[" + i + "]=" + list.get(i)); <br />} <br />//结果：23 <br />7) 返回Collections中最小元素(max) <br />根据指定比较器产生的顺序，返回给定 <span class="hilite2"><font style="BACKGROUND-COLOR: #55ff55">collection</font></span> 的最大元素。<span class="hilite2"><font style="BACKGROUND-COLOR: #55ff55">collection</font></span> 中的所有元素都必须是通过指定比较器可相互比较的 <br />Collections.max(list) <br />double array[] = {112, 111, 23, 456, 231 }; <br />List list = new ArrayList(); <br />for (int i = 0; i &lt; array.length; i++) { <br />list.add(new Double(array[i])); <br />} <br />Collections.max(list); <br />for (int i = 0; i &lt;list.size(); i++) { <br />System.out.println("list[" + i + "]=" + list.get(i)); <br />} <br />//结果：456 <br />           <br /></p><img src ="http://www.blogjava.net/supersalor/aggbug/288969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supersalor/" target="_blank">李峰</a> 2009-07-29 22:10 <a href="http://www.blogjava.net/supersalor/articles/288969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2SE 5.0新特性（转）</title><link>http://www.blogjava.net/supersalor/articles/288961.html</link><dc:creator>李峰</dc:creator><author>李峰</author><pubDate>Wed, 29 Jul 2009 13:52:00 GMT</pubDate><guid>http://www.blogjava.net/supersalor/articles/288961.html</guid><wfw:comment>http://www.blogjava.net/supersalor/comments/288961.html</wfw:comment><comments>http://www.blogjava.net/supersalor/articles/288961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supersalor/comments/commentRss/288961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supersalor/services/trackbacks/288961.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#02368d" size="5">J2SE 5.0新特性（转）<br /><br /><br /></font>
		</strong>
		<font color="#000000" size="3">J2SE 5.0 (Tiger)的发布是Java语言发展史上的一个重要的里程碑, 是迄今为止在 Java 编程方面所取得的最大进步.<br />    J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类型(enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxing)/装箱(autoboxing), 可变个数参数(varargs), 静态导入(static imports), 以及新的线程架构(Thread framework).<br /><br />    用Java用了半年了，J2SE 5.0的新特性竟然了解甚少，下面这些文章详细介绍了J2SE 5.0的新特性，敬请参考:<br /><br /></font>
		<a href="http://www.ibm.com/developerworks/cn/java/j-tiger-eclispe1/" target="_blank">
				<font size="3">在 Eclipse 3.1 中体验 J2SE 5.0 的新特性: 第一部分 ：枚举类型</font>
		</a>
		<br />
		<a href="http://www.ibm.com/developerworks/cn/java/j-tiger-eclispe2/" target="_blank">
				<font size="3">在 Eclipse 3.1 中体验 J2SE 5.0 的新特性: 第二部分 ：注释类型</font>
		</a>
		<br />
		<a href="http://www.ibm.com/developerworks/cn/java/j-tiger-eclispe3/" target="_blank">
				<font size="3">在 Eclipse 3.1 中体验 J2SE 5.0 的新特性: 第三部分 ：范型</font>
		</a>
		<br />
		<a href="http://dev2dev.bea.com/pub/a/2005/09/java_5_features.html" target="_blank">
				<font size="3">Experiences with the New Java 5 Language Features</font>
		</a>
		<br />
		<a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/" target="_blank">
				<font size="3">SUN-DOC: Enhancements in JDK 5</font>
		</a>
		<br />
<img src ="http://www.blogjava.net/supersalor/aggbug/288961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supersalor/" target="_blank">李峰</a> 2009-07-29 21:52 <a href="http://www.blogjava.net/supersalor/articles/288961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>