﻿<?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-just do</title><link>http://www.blogjava.net/nicaini/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:04:36 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:04:36 GMT</pubDate><ttl>60</ttl><item><title>java中的集合</title><link>http://www.blogjava.net/nicaini/archive/2008/09/20/230158.html</link><dc:creator>nicaini</dc:creator><author>nicaini</author><pubDate>Sat, 20 Sep 2008 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/nicaini/archive/2008/09/20/230158.html</guid><wfw:comment>http://www.blogjava.net/nicaini/comments/230158.html</wfw:comment><comments>http://www.blogjava.net/nicaini/archive/2008/09/20/230158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nicaini/comments/commentRss/230158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nicaini/services/trackbacks/230158.html</trackback:ping><description><![CDATA[一、用得最多的主要有Set,List,Map,Iterator这几个接口, Set和List接口都是Collection接口的子接口,有很多相同的地方，我们只是撑握了Collection接口的方法，Set和List的用法也就差不多了.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set和List 的区别：1、Set是没有顺序的，不能放重复的数据(相同的数据)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、List是有顺序的，可以存放重复的数据(相同的数据)<br />
Set的实现类常用的主要有两个：HashSet、TreeSet<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们可以把一类对象添加到集合中，并且按对象的某一个属性进行排序（客户化排序和自然排序)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、对TreeSet集进行客户化排序要求写一个类实现Comparator接口，并且重写其中的Compare方法 例:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客户化排序容易扩展，如果要按其它的属性排序，只需要重新写一个类实现Comparator接口就可以了，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不需要修改原来的代码。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class Users <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Users(String name,int id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name=name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id=id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setName(String name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name=name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getName()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setId(int id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id=id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int getId()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里重写了父类的toString方法 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String toString()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.name + "\t" + this.id + "\t";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这个类实现Comparator接口，并且重写了其中的compare方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public class MyComparator implements Comparator<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int&nbsp;&nbsp;compare(Object o1,Object o2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user1=(Users)o1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user2=(Users)o2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(user1.getId&gt;user2.getId) return 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(user1.getId==user2.getId) return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;TestComparator<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String args[])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestComparator.test();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static void test()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;&nbsp; set=new TreeSet(new MyComparator());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user1=new&nbsp;&nbsp;Users("张三",17);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user2=new&nbsp;&nbsp;Users("李四",13);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user3=new&nbsp;&nbsp;Users("王五",19);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user5=new Users("王五",19);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.add(user1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.add(user2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.add(user3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.add(user5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(Object obj ：set)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(obj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; 2、自然排序，将需要排序的那个类实现Comparable接口并且重写其中的compareTo方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如下:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class Users&nbsp;&nbsp;implements Comparable<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Users(String name,int id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name=name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id=id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setName(String name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name=name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getName()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setId(int id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id=id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int getId()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里重写了父类的toString方法 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String toString()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.name + "\t" + this.id + "\t";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//重写compareTo方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int compareTo(Object o) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UserBean user = (UserBean) o;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.id &gt; user.id) return 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (this.id == user.id) return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.如果是HashSet自然排序，则要求排序的类重写hashCode方法和equals方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二、对List和Set集进行遍历：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List集有三种方法进行遍历：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、通过下标遍历,2使用迭代器进行遍历，3、增强循环进行遍历<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list=new ArrayList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add("aa");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add("bb");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add("cc");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;list.size();i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(list.get(i));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=list.iterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(it.next());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;for(Object obj ：list)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(obj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;三、Vector和ArrayList的区别:<br />
&nbsp;&nbsp;&nbsp;&nbsp;1、Vector 和ArrayList都实现了List接口，Vector是线程安全的，可以多个线程同时访问,但性能比较差<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、ArrayList线程不安全，不支持多个线程同时访问，但性能比较好，访问的速度快<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;四、Map集是以键值对的形式存放的，键不可以重复，值可以重复，如果键重复，会将原来的值覆盖，<br />
&nbsp;&nbsp;&nbsp;&nbsp; Map集的实现类主要有三个:HashMap,TreeMap,HashTable<br />
&nbsp;&nbsp;&nbsp;&nbsp;HashMap与HashTable 的区别: 1、HashTable是线程安全的，支持同步。2、HashMap线程不安全，不支持<br />
&nbsp;&nbsp;&nbsp;&nbsp;同步，但性能比HashTable好<br />
&nbsp;&nbsp;&nbsp;&nbsp;Map集的遍历：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map map=new HashMap()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put("1","张飞");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put("2","关羽");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put("3","刘备");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到键的集合<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set set=map.keySet();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(Object obj ：set)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(map.get(obj));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到健值对的集合<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set s=map.entrySet();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(Object obj ：set)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(obj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; 五、对List集进行客户化排序，可以通过Collections类的sort方法，要求传一个List集和一个Comparator对象 例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List list=new ArrayList()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user1=new&nbsp;&nbsp;Users("张三",17);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user2=new&nbsp;&nbsp;Users("李四",13);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user3=new&nbsp;&nbsp;Users("王五",19);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users user5=new Users("王五",19);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(user1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(user2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(user3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(user5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(list,new Mycomparator());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator it=list.iterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(it.hasNext())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(it.next());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
<img src ="http://www.blogjava.net/nicaini/aggbug/230158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nicaini/" target="_blank">nicaini</a> 2008-09-20 17:07 <a href="http://www.blogjava.net/nicaini/archive/2008/09/20/230158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Collection和Collections的区别</title><link>http://www.blogjava.net/nicaini/archive/2008/09/20/230111.html</link><dc:creator>nicaini</dc:creator><author>nicaini</author><pubDate>Sat, 20 Sep 2008 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/nicaini/archive/2008/09/20/230111.html</guid><wfw:comment>http://www.blogjava.net/nicaini/comments/230111.html</wfw:comment><comments>http://www.blogjava.net/nicaini/archive/2008/09/20/230111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nicaini/comments/commentRss/230111.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nicaini/services/trackbacks/230111.html</trackback:ping><description><![CDATA[<div>java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。<br />
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化，就像一个工具类，服务于Java的Collection框架。<br />
</div>
<div>具体的差别看看Java API文档就知道了。</div>
<img src ="http://www.blogjava.net/nicaini/aggbug/230111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nicaini/" target="_blank">nicaini</a> 2008-09-20 11:48 <a href="http://www.blogjava.net/nicaini/archive/2008/09/20/230111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java初学者都必须理解的七大问题</title><link>http://www.blogjava.net/nicaini/archive/2008/09/18/229678.html</link><dc:creator>nicaini</dc:creator><author>nicaini</author><pubDate>Thu, 18 Sep 2008 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/nicaini/archive/2008/09/18/229678.html</guid><wfw:comment>http://www.blogjava.net/nicaini/comments/229678.html</wfw:comment><comments>http://www.blogjava.net/nicaini/archive/2008/09/18/229678.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nicaini/comments/commentRss/229678.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nicaini/services/trackbacks/229678.html</trackback:ping><description><![CDATA[<p><span style="color: #7b68ff">问题一：我声明了什么！</span></p>
<p><span style="color: #7b68ff">　　String s = "Hello world!"; <br />
　　许多人都做过这样的事情，但是，我们到底声明了什么？回答通常是：一个String，内容是"Hello world!"。这样模糊的回答通常是概念不清的根源。如果要准确的回答，一半的人大概会回答错误。 <br />
　　这个语句声明的是一个指向对象的引用，名为&#8220;s&#8221;，可以指向类型为String的任何对象，目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象，我们只是声明了一个只能指向String对象的引用变量。所以，如果在刚才那句语句后面，如果再运行一句： <br />
　　String string = s; <br />
　　我们是声明了另外一个只能指向String对象的引用，名为string，并没有第二个对象产生，string还是指向原来那个对象，也就是，和s指向同一个对象。 </span></p>
<p><span style="color: #7b68ff">问题二："=="和equals方法究竟有什么区别？ </span></p>
<p><span style="color: #7b68ff">　　==操作符专门用来比较变量的值是否相等。<br />
　　int a=10; <br />
　　int b=10; <br />
　　则a==b将是true。 </span></p>
<p><span style="color: #7b68ff">　　但:<br />
　　String a=new String("foo"); <br />
　　String b=new String("foo"); <br />
　　则a==b将返回false。 </span></p>
<p><span style="color: #7b68ff">　　对象变量其实是一个引用，它们的值是指向对象所在的内存地址，而不是对象本身。a和b都使用了new操作符，意味着将在内存中产生两个内容为"foo"的字符串，既然是&#8220;两个&#8221;，它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值，所以使用"=="操作符，结果会是false。虽然，a和b所指的对象，它们的内容都是"foo"，应该是&#8220;相等&#8221;，但是==操作符并不涉及到对象内容的比较。 </span></p>
<p><span style="color: #7b68ff">　　对象内容的比较应使用Object对象的equals方法。 <br />
　　boolean equals(Object o){ <br />
return this==o; <br />
　　} <br />
　　Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法，那你的类使用equals和使用==会得到同样的结果。同样也可以看出，Object的equals方法没有达到equals方法应该达到的目标：比较两个对象内容是否相等。因为答案应该由类的创建者决定，所以Object把这个任务留给了类的创建者。 </span></p>
<p><span style="color: #7b68ff">　　例如： <br />
　　Class MyClass{ <br />
　　 private String content; <br />
　　 ... <br />
　　 boolean equals(Object another){ <br />
return true;<br />
} <br />
} <br />
　　MyClass类中的equals方法覆盖了父类object类的equals方法。这个实现会导致无论MyClass类的实例内容如何，它们之间的比较永远返回true。 <br />
　　所以当使用equals方法判断对象的内容是否相等，请不要想当然。因为可能你认为相等，而这个类的创建者不这样认为，而类的equals方法的实现是由他掌握的。</span></p>
<p><span style="color: #7b68ff">问题三：String和StringBuffer的区别<br />
String类被设计成不可变(immutable)类，所以它的所有对象都是不可变对象。请看下列代码： </span></p>
<p><span style="color: #7b68ff">　　String s = "Hello"; <br />
　　s = s + " world!"; </span></p>
<p><span style="color: #7b68ff">　　s所指向的对象是否改变了呢？在这段代码中，s原先指向一个String对象，内容是"Hello"，然后我们对s进行了+操作，那么s所指向的那个对象是否发生了改变呢？答案是没有。这时，s不指向原来那个对象了，而指向了另一个String对象，内容为"Hello world!"，原来那个对象还存在于内存之中，只是s这个引用变量不再指向它了。 </span></p>
<p><span style="color: #7b68ff">　　所以，如果经常对字符串进行各种各样的修改，使用String类来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变，所以对于每一个不同的字符串，都需要一个String对象来表示。这时，应该考虑使用StringBuffer类，它允许修改，而不是每个不同的字符串都要生成一个新的对象。并且，这两种类的对象转换十分容易。 </span></p>
<p><span style="color: #7b68ff">　　同时，我们还可以知道，如果要使用内容相同的字符串，不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化，把它设置为初始值，应当这样做： </span></p>
<p><span style="color: #7b68ff">　　public class Demo { <br />
　　 private String s; <br />
　　 ... <br />
　　 public Demo { <br />
　　 s = "Initial Value"; <br />
　　 } <br />
　　... <br />
　　} </span></p>
<p><span style="color: #7b68ff">　　而非 <br />
　　s = new String("Initial Value"); </span></p>
<p><span style="color: #7b68ff">　　后者每次都会调用构造器，生成新对象，性能低下且内存开销大，并且没有意义，因为String对象不可改变，所以对于内容相同的字符串，只要一个String对象来表示就可以了。也就说，多次调用上面的构造器创建多个对象，他们的String类型属性s都指向同一个对象。 <br />
　　上面的结论还基于这样一个事实：对于字符串常量，如果内容相同，Java认为它们代表同一个String对象。而用关键字new调用构造器，总是会创建一个新的对象，无论内容是否相同。 <br />
　　至于为什么要把String类设计成不可变类，是它的用途决定的。其实不只String，很多Java标准类库中的类都是不可变的。在开发一个系统的时候，我们有时候也需要设计不可变类，来传递一组相关的值，这也是面向对象思想的体现。不可变类有一些优点，比如因为它的对象是只读的，所以多线程并发访问也不会有任何问题。当然也有一些缺点，比如每个不同的状态都要一个对象来代表，可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本，即StringBuffer。 </span></p>
<p><span style="color: #7b68ff">问题四：逻辑与/或 和 短路与/或的区别</span></p>
<p><span style="color: #7b68ff">逻辑操作符：&amp;(与运算),^(异或运算),|(或运算)。<br />
短路逻辑操作符：&amp;&amp;(并且),||(或者).<br />
短路与/或运算符和逻辑与/或一样可以实现逻辑运算,但是此时有一个重要的区别:用逻辑与/或运算时,不管操作符两边的条件表达式成不成立,它都要进行运算判断,而短路与/或运算不一样了,如果通过左侧的操作数就可以进行它们需要的判断,那么它就不会再计算右侧的操作数了，请看下面的例子：<br />
&#8230;&#8230;<br />
double value=0;<br />
if(value!=0 &amp;&amp; 1/value&lt;1000){<br />
System.out.println("The value is not too small.");<br />
}<br />
else{<br />
System.out.println("The value is too small.");<br />
}<br />
&#8230;&#8230;<br />
运行结果:<br />
The value is too small.<br />
结果分析:<br />
照理说应会出现除数为0的错误,但由于条件逻辑操作符是短路操作符,显然,value!=0条件不成立,立即就可作出判断应执行else后的语句,所以它就不再会运算判断1/value&lt;1000了.如果不懂请再看一例:<br />
......<br />
double int1=0,int2=1,int3=1;<br />
if(int1!=0 &amp; (int2=2)==1){<br />
}<br />
System.out.println("int2="+int2);<br />
if(int1!=0 &amp;&amp; (int3=2)==1){<br />
}<br />
System.out.println("int3="+int3);<br />
......</span></p>
<p><span style="color: #7b68ff">运行结果:<br />
int2=2.0<br />
int3=1.0</span></p>
<p><span style="color: #7b68ff">问题五.实例变量与类变量（静态变量）</span></p>
<p><span style="color: #7b68ff">可以通过两种方法在类中存储数据──作为实例变量和类变量.实例变量是特定于对象的,如果你有两个对象(即一个类的两个实例),每一个对象中的实例变量独立于另一个对象中的实例变量的;另一方面,两个对象的类变量均指向相同的数据,并因此面保存相同的值,换句话说,类变量被类中的所有对象共享,类变量在声明时比实例变量多一个static.<br />
class Data{<br />
public int intdata=0;//intdata在这儿是实例变量<br />
}<br />
public class Test{<br />
public static void main(String[] args){<br />
Data a,b;<br />
a=new Data ();<br />
b=new Data ();<br />
a.intdata=1;<br />
System.out.println("b.indata="+b.intdata);<br />
}<br />
}<br />
运行结果:<br />
b.intdata=0<br />
结果分析:<br />
可以看出,a.intdata的值虽然变了,但并没有影响b.intdata.但是如果在data类中声明intdata时,在其前面加上static就变成类变量了(即:public static int intdata=0;),则此时运行结果会变为:b.intdata=1<br />
这次a.intdata值的改变可把b.intdata影响了,事实上,对象a和b的类变量均指向相同的数据,所有值一样,这就是类变量的作用.</span></p>
<p><span style="color: #7b68ff">问题六：实例方法,类方法（静态方法）,构造器方法</span></p>
<p><span style="color: #7b68ff">我们通常所说的方法系指实例方法。类方法(即静态方法)与实例方法最大的区别是:在形式上类方法多一个static,在用法上不必创建对象就可直接调用类方法(而实例方法却一定要先创建对象,再通过对象调用)。<br />
class Add{<br />
static int addNum(int op1,int op2){<br />
return op1+op2;<br />
}<br />
}<br />
public class Test{<br />
public static void main(String[] args){<br />
//直接用类名作为对象调用类方法<br />
System.out.println("addem(2,2)="+Add.addNum(2,2));<br />
} <br />
}<br />
注: 也可按通常的方法,即先创建对象,再调用方法,不过,这时static就无任何意义了。<br />
构造器方法,它是用来初始化对象中的数据的一种方法,创建很容易,只需在类中加上一个与这个类同名的方法,不需要在前面加任何访问说明符或者返回类型,另外,构造器也一样可以象方法一样传递参数.<br />
class Data{<br />
private String data1;//事先声明<br />
Data(String s){<br />
data1=s; /*通过接收数据来初始化变量.(注:不能在构造器内声明变<br />
量,事先在外就要声明.)*/<br />
}<br />
public String getData(){<br />
return data1;<br />
}<br />
}<br />
public class Test{<br />
public static void main(String[] args){<br />
/*通过传递参数调用构造器新建一个对象,再通过对象调用方法得到数据*/<br />
System.out.println((new Data("I love you")).getData());<br />
}<br />
}</span></p>
<p><span style="color: #7b68ff">问题七：接口与类</span></p>
<p><span style="color: #7b68ff">类是对一类特定对象的规格说明,我们可以定义类，然后创建类的对象,通过创建类的对象来组合所有属于该类的组件,而接口不能这样做.而接口实质上就是一个常量和抽象方法的集合,要使用一个接口,就需要在类中实现这个接口,然后作为类定义的一部分,编写接口中声明的每一个方法,接口中的方法永远是public,abstract,接口中的常量永远是public static和final,因此不需要为它们说明属性.因为在Java中不支持多重继承,但是,可以用接口来实现类似的功能,这是接口的重要作用之一。<br />
interface anyone{ //定义一个接口<br />
final double PI=3.1416;<br />
void setNumber(int number);<br />
int getNumber();<br />
}<br />
interface anyother{ //定义另一个接口<br />
void setString(String str);<br />
String getString();<br />
}</span></p>
<p><span style="color: #7b68ff">class Test implement anyone,anyother{ //定义一个类,并使用两个接口<br />
int number;<br />
String str;<br />
public Test(){<br />
}<br />
void setNumber(int number){<br />
this.number=number;<br />
}<br />
void setString(String str){<br />
this.str=str;<br />
}<br />
void int getNumber(){<br />
}//可以为一个空实现.<br />
void String getString(){<br />
}<br />
}<br />
</span></p>
<img src ="http://www.blogjava.net/nicaini/aggbug/229678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nicaini/" target="_blank">nicaini</a> 2008-09-18 14:03 <a href="http://www.blogjava.net/nicaini/archive/2008/09/18/229678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>