Map集合 我不是女神ヾ 2022-05-21 13:18 289阅读 0赞 # Map集合 # ## 一、Map集合概述和特点 ## 1,概述 \*将键映射到值的对象 \*一个映射不能包含重复的键 \*每一个键最多只能映射到一个值 2,Map接口和Collection接口的不同 \*Map是双列的,Collection是单列的 \*Map的键唯一,Collection的子体系Set是唯一的 \*Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 ## 二、Map集合的功能 ## \* a:添加功能 \* V put(K key,V value):添加元素。 \* 如果键是第一次存储,就直接存储元素,返回null \* 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值 \* b:删除功能 \* void clear():移除所有的键值对元素 \* V remove(Object key):根据键删除键值对元素,并把值返回 \* c:判断功能 \* boolean containsKey(Object key):判断集合是否包含指定的键 \* boolean containsValue(Object value):判断集合是否包含指定的值 \* boolean isEmpty():判断集合是否为空 \* d:获取功能 \* Set<Map.Entry<K,V>> entrySet(): \* V get(Object key):根据键获取值 \* Set<K> keySet():获取集合中所有键的集合 \* Collection<V> values():获取集合中所有值的集合 \* e:长度功能 \* int size():返回集合中的键值对的个数 ## 三、Map集合的遍历之键查找值 ## 1,思路: \* 获取所有键的集合 \* 遍历键的集合,获取到每一个键 \* 根据键查找值 2,例子: Java Code <table style="font-family:Consolas, 'Courier New';font-size:12px;vertical-align:text-top;line-height:15px;"> <tbody> <tr> <td style="color:#008284;background-color:#e3e3e3;vertical-align:text-top;"> <div style="text-align:right;"> 1 <br>2 <br>3 <br>4 <br>5 <br>6 <br>7 <br>8 <br>9 <br>10 <br>11 <br>12 <br>13 <br>14 <br>15 <br>16 <br>17 <br> </div></td> <td style="background-color:#008284;"> <div style="border:1px #008284 solid;"></div></td> <td style="background-color:#efefef;vertical-align:text-top;color:#000000;"> <div> HashMap< <span style="color:#8000ff;">String</span> <span style="color:#000000;">, Integer> hm = </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> HashMap<>();<br> hm.put(</span> <span style="color:#800000;">"张三"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">23</span> <span style="color:#000000;">);<br> hm.put(</span> <span style="color:#800000;">"李四"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">24</span> <span style="color:#000000;">);<br> hm.put(</span> <span style="color:#800000;">"王五"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">25</span> <span style="color:#000000;">);<br> hm.put(</span> <span style="color:#800000;">"赵六"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">26</span> <span style="color:#000000;">);<br> <br> </span> <span style="color:#008000;">/*Set<String> keySet = hm.keySet(); //获取集合中所有的键<br> Iterator<String> it = keySet.iterator(); //获取迭代器<br> while(it.hasNext()) { //判断单列集合中是否有元素<br> String key = it.next(); //获取集合中的每一个元素,其实就是双列集合中的键<br> Integer value = hm.get(key); //根据键获取值<br> System.out.println(key + "=" + value); //打印键值对<br> }*/</span> <span style="color:#000000;"><br> <br> </span> <span style="color:#0000ff;">for</span> <span style="color:#000000;">(</span> <span style="color:#8000ff;">String</span> <span style="color:#000000;"> key : hm.keySet()) { </span> <span style="color:#008000;">//增强for循环迭代双列集合第一种方式<br></span> <span style="color:#000000;"> System.out.println(key + </span> <span style="color:#800000;">"="</span> <span style="color:#000000;"> + hm.get(key));<br> }</span> </div></td> </tr> </tbody> </table> 3,图解: ![70][] ## 四、Map集合的遍历之键值对对象找键和值 ## 1,思路: \* 获取所有键值对对象集合 \* 遍历键值对对象的集合,获取到每一个键值对对象 \* 根据键值对对象找键和值 2,例子: Java Code <table style="font-family:Consolas, 'Courier New';font-size:12px;vertical-align:text-top;line-height:15px;"> <tbody> <tr> <td style="color:#008284;background-color:#e3e3e3;vertical-align:text-top;"> <div style="text-align:right;"> 1 <br>2 <br>3 <br>4 <br>5 <br>6 <br>7 <br>8 <br>9 <br>10 <br>11 <br>12 <br>13 <br>14 <br>15 <br>16 <br>17 <br>18 <br> </div></td> <td style="background-color:#008284;"> <div style="border:1px #008284 solid;"></div></td> <td style="background-color:#efefef;vertical-align:text-top;color:#000000;"> <div> HashMap< <span style="color:#8000ff;">String</span> <span style="color:#000000;">, Integer> hm = </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> HashMap<>();<br>hm.put(</span> <span style="color:#800000;">"张三"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">23</span> <span style="color:#000000;">);<br>hm.put(</span> <span style="color:#800000;">"李四"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">24</span> <span style="color:#000000;">);<br>hm.put(</span> <span style="color:#800000;">"王五"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">25</span> <span style="color:#000000;">);<br>hm.put(</span> <span style="color:#800000;">"赵六"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">26</span> <span style="color:#000000;">);<br></span> <span style="color:#008000;">/*Set<Map.Entry<String, Integer>> entrySet = hm.entrySet(); //获取所有的键值对象的集合<br>Iterator<Entry<String, Integer>> it = entrySet.iterator();//获取迭代器<br>while(it.hasNext()) { <br> Entry<String, Integer> en = it.next(); //获取键值对对象<br> String key = en.getKey(); //根据键值对对象获取键<br> Integer value = en.getValue(); //根据键值对对象获取值<br> System.out.println(key + "=" + value);<br>}*/</span> <span style="color:#000000;"><br><br></span> <span style="color:#0000ff;">for</span> <span style="color:#000000;">(Entry<</span> <span style="color:#8000ff;">String</span> <span style="color:#000000;">, Integer> en : hm.entrySet())<br>{ <br> System.out.println(en.getKey() + </span> <span style="color:#800000;">"="</span> <span style="color:#000000;"> + en.getValue());<br>}</span> </div></td> </tr> </tbody> </table> 3,图解: ![70 1][] ## 五、HashMap与LinkedHashMap ## 1,HashMap演示: Java Code <table style="font-family:Consolas, 'Courier New';font-size:12px;vertical-align:text-top;line-height:15px;"> <tbody> <tr> <td style="color:#008284;background-color:#e3e3e3;vertical-align:text-top;"> <div style="text-align:right;"> 1 <br>2 <br>3 <br>4 <br>5 <br>6 <br>7 <br>8 <br>9 <br>10 <br>11 <br>12 <br>13 <br> </div></td> <td style="background-color:#008284;"> <div style="border:1px #008284 solid;"></div></td> <td style="background-color:#efefef;vertical-align:text-top;color:#000000;"> <div> <span style="color:#008000;">/* HashMap集合键是Student值是String的案例<br> * 键是学生对象,代表每一个学生<br> * 值是字符串对象,代表学生归属地<br> */</span> <span style="color:#000000;"><br> </span> <span style="color:#0000ff;">public</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">static</span> <span style="color:#000000;"> </span> <span style="color:#8000ff;">void</span> <span style="color:#000000;"> main(</span> <span style="color:#8000ff;">String</span> <span style="color:#000000;">[] args) { <br> HashMap<Student, </span> <span style="color:#8000ff;">String</span> <span style="color:#000000;">> hm = </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> HashMap<>();<br> hm.put(</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> Student(</span> <span style="color:#800000;">"张三"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">23</span> <span style="color:#000000;">), </span> <span style="color:#800000;">"北京"</span> <span style="color:#000000;">);<br> hm.put(</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> Student(</span> <span style="color:#800000;">"张三"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">23</span> <span style="color:#000000;">), </span> <span style="color:#800000;">"上海"</span> <span style="color:#000000;">);<br> hm.put(</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> Student(</span> <span style="color:#800000;">"李四"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">24</span> <span style="color:#000000;">), </span> <span style="color:#800000;">"广州"</span> <span style="color:#000000;">);<br> hm.put(</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> Student(</span> <span style="color:#800000;">"王五"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">25</span> <span style="color:#000000;">), </span> <span style="color:#800000;">"深圳"</span> <span style="color:#000000;">);<br> <br> System.out.println(hm);<br> }</span> </div></td> </tr> </tbody> </table> 2,LinkedHashMap可以保证怎么存就怎么取 3,HashMap和Hashtable的区别 \* Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高 \* Hashtable不可以存储null键和null值,HashMap可以存储null键和null值 ## 六、TreeMap ## 可实现对存储的元素进行排序,原理同TreeSet。对自定义类有两种方式实现 例1: Java Code <table style="font-family:Consolas, 'Courier New';font-size:12px;vertical-align:text-top;line-height:15px;"> <tbody> <tr> <td style="color:#008284;background-color:#e3e3e3;vertical-align:text-top;"> <div style="text-align:right;"> <span style="font-size:12px;">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br></span> </div></td> <td style="background-color:#008284;"> <div style="border:1px #008284 solid;"></div></td> <td style="background-color:#efefef;vertical-align:text-top;color:#000000;"> <div> <span style="font-size:12px;"> <span style="color:rgb(0,128,0);">/**<br> * * A:案例演示<br> * TreeMap集合键是Student值是String的案例<br> */</span><span style="color:rgb(0,0,0);"><br> </span><span style="color:rgb(0,0,255);">public</span><span style="color:rgb(0,0,0);"> </span><span style="color:rgb(0,0,255);">static</span><span style="color:rgb(0,0,0);"> </span><span style="color:rgb(128,0,255);">void</span><span style="color:rgb(0,0,0);"> main(</span><span style="color:rgb(128,0,255);">String</span><span style="color:rgb(0,0,0);">[] args) { <br> </span><span style="color:rgb(0,128,0);">//demo1();<br></span><span style="color:rgb(0,0,0);"> TreeMap<Student, </span><span style="color:rgb(128,0,255);">String</span><span style="color:rgb(0,0,0);">> tm = </span><span style="color:rgb(0,0,255);">new</span><span style="color:rgb(0,0,0);"> TreeMap<>(</span><span style="color:rgb(0,0,255);">new</span><span style="color:rgb(0,0,0);"> Comparator<Student>() { <br><br> @Override<br> </span><span style="color:rgb(0,0,255);">public</span><span style="color:rgb(0,0,0);"> </span><span style="color:rgb(128,0,255);">int</span><span style="color:rgb(0,0,0);"> compare(Student s1, Student s2) { <br> </span><span style="color:rgb(128,0,255);">int</span><span style="color:rgb(0,0,0);"> num = s1.getName().compareTo(s2.getName()); </span><span style="color:rgb(0,128,0);">//按照姓名比较<br></span><span style="color:rgb(0,0,0);"> </span><span style="color:rgb(0,0,255);">return</span><span style="color:rgb(0,0,0);"> num == </span><span style="color:rgb(255,0,0);">0</span><span style="color:rgb(0,0,0);"> ? s1.getAge() - s2.getAge() : num;<br> }<br> });<br> tm.put(</span><span style="color:rgb(0,0,255);">new</span><span style="color:rgb(0,0,0);"> Student(</span><span style="color:rgb(128,0,0);">"张三"</span><span style="color:rgb(0,0,0);">, </span><span style="color:rgb(255,0,0);">23</span><span style="color:rgb(0,0,0);">), </span><span style="color:rgb(128,0,0);">"北京"</span><span style="color:rgb(0,0,0);">);<br> tm.put(</span><span style="color:rgb(0,0,255);">new</span><span style="color:rgb(0,0,0);"> Student(</span><span style="color:rgb(128,0,0);">"李四"</span><span style="color:rgb(0,0,0);">, </span><span style="color:rgb(255,0,0);">13</span><span style="color:rgb(0,0,0);">), </span><span style="color:rgb(128,0,0);">"上海"</span><span style="color:rgb(0,0,0);">);<br> tm.put(</span><span style="color:rgb(0,0,255);">new</span><span style="color:rgb(0,0,0);"> Student(</span><span style="color:rgb(128,0,0);">"赵六"</span><span style="color:rgb(0,0,0);">, </span><span style="color:rgb(255,0,0);">43</span><span style="color:rgb(0,0,0);">), </span><span style="color:rgb(128,0,0);">"深圳"</span><span style="color:rgb(0,0,0);">);<br> tm.put(</span><span style="color:rgb(0,0,255);">new</span><span style="color:rgb(0,0,0);"> Student(</span><span style="color:rgb(128,0,0);">"王五"</span><span style="color:rgb(0,0,0);">, </span><span style="color:rgb(255,0,0);">33</span><span style="color:rgb(0,0,0);">), </span><span style="color:rgb(128,0,0);">"广州"</span><span style="color:rgb(0,0,0);">);<br> <br> System.out.println(tm);<br> }</span></span> </div></td> </tr> </tbody> </table> 例2: 1,先定义Student类,实现Comparable接口,重写compareTo方法,具体排序规则在compareTo方法中规定 Java Code <table style="font-family:Consolas, 'Courier New';font-size:12px;vertical-align:text-top;line-height:15px;"> <tbody> <tr> <td style="color:#008284;background-color:#e3e3e3;vertical-align:text-top;"> <div style="text-align:right;"> <span style="font-size:12px;">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br>32<br>33<br>34<br>35<br>36<br>37<br>38<br>39<br></span> </div></td> <td style="background-color:#008284;"> <div style="border:1px #008284 solid;"></div></td> <td style="background-color:#efefef;vertical-align:text-top;color:#000000;"> <div> <span style="font-size:12px;"><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#0000ff;">class</span><span style="color:#000000;"> Student </span><span style="color:#0000ff;">implements</span><span style="color:#000000;"> Comparable<Student> { <br> </span><span style="color:#0000ff;">private</span><span style="color:#000000;"> </span><span style="color:#8000ff;">String</span><span style="color:#000000;"> name;<br> </span><span style="color:#0000ff;">private</span><span style="color:#000000;"> </span><span style="color:#8000ff;">int</span><span style="color:#000000;"> age;<br> <br> get方法,set方法,toString方法<br> <br> @Override<br> </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#8000ff;">int</span><span style="color:#000000;"> hashCode() { <br> </span><span style="color:#0000ff;">final</span><span style="color:#000000;"> </span><span style="color:#8000ff;">int</span><span style="color:#000000;"> prime = </span><span style="color:#ff0000;">31</span><span style="color:#000000;">;<br> </span><span style="color:#8000ff;">int</span><span style="color:#000000;"> result = </span><span style="color:#ff0000;">1</span><span style="color:#000000;">;<br> result = prime * result + age;<br> result = prime * result + ((name == null) ? </span><span style="color:#ff0000;">0</span><span style="color:#000000;"> : name.hashCode());<br> </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> result;<br> }<br> @Override<br> </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#8000ff;">boolean</span><span style="color:#000000;"> equals(Object obj) { <br> </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> (</span><span style="color:#0000ff;">this</span><span style="color:#000000;"> == obj)<br> </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> true;<br> </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> (obj == null)<br> </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> false;<br> </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> (getClass() != obj.getClass())<br> </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> false;<br> Student other = (Student) obj;<br> </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> (age != other.age)<br> </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> false;<br> </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> (name == null) { <br> </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> (other.name != null)<br> </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> false;<br> } </span><span style="color:#0000ff;">else</span><span style="color:#000000;"> </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> (!name.equals(other.name))<br> </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> false;<br> </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> true;<br> }<br> @Override<br> </span><span style="color:#0000ff;">public</span><span style="color:#000000;"> </span><span style="color:#8000ff;">int</span><span style="color:#000000;"> compareTo(Student o) { <br> </span><span style="color:#8000ff;">int</span><span style="color:#000000;"> num = </span><span style="color:#0000ff;">this</span><span style="color:#000000;">.age - o.age; </span><span style="color:#008000;">//以年龄为主要条件<br></span><span style="color:#000000;"> </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> num == </span><span style="color:#ff0000;">0</span><span style="color:#000000;"> ? </span><span style="color:#0000ff;">this</span></span> <span style="color:#000000;"><span style="font-size:12px;">.name.compareTo(o.name) : num;<br> }<br>}</span><br></span> </div></td> </tr> </tbody> </table> 2,然后new对象存储即可 Java Code <table style="font-family:Consolas, 'Courier New';font-size:12px;vertical-align:text-top;line-height:15px;"> <tbody> <tr> <td style="color:#008284;background-color:#e3e3e3;vertical-align:text-top;"> <div style="text-align:right;"> 1 <br>2 <br>3 <br>4 <br>5 <br>6 <br>7 <br>8 <br>9 <br> </div></td> <td style="background-color:#008284;"> <div style="border:1px #008284 solid;"></div></td> <td style="background-color:#efefef;vertical-align:text-top;color:#000000;"> <div> <span style="color:#0000ff;">public</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">static</span> <span style="color:#000000;"> </span> <span style="color:#8000ff;">void</span> <span style="color:#000000;"> demo1() { <br> TreeMap<Student, </span> <span style="color:#8000ff;">String</span> <span style="color:#000000;">> tm = </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> TreeMap<>();<br> tm.put(</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> Student(</span> <span style="color:#800000;">"张三"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">23</span> <span style="color:#000000;">), </span> <span style="color:#800000;">"北京"</span> <span style="color:#000000;">);<br> tm.put(</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> Student(</span> <span style="color:#800000;">"李四"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">13</span> <span style="color:#000000;">), </span> <span style="color:#800000;">"上海"</span> <span style="color:#000000;">);<br> tm.put(</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> Student(</span> <span style="color:#800000;">"王五"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">33</span> <span style="color:#000000;">), </span> <span style="color:#800000;">"广州"</span> <span style="color:#000000;">);<br> tm.put(</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> Student(</span> <span style="color:#800000;">"赵六"</span> <span style="color:#000000;">, </span> <span style="color:#ff0000;">43</span> <span style="color:#000000;">), </span> <span style="color:#800000;">"深圳"</span> <span style="color:#000000;">);<br> <br> System.out.println(tm);<br> }</span> </div></td> </tr> </tbody> </table> ## 七、Collections工具类 ## \* 针对集合操作 的工具类 public static <T> void sort(List<T> list) //将集合排序 public static <T> int binarySearch(List<?> list,T key) //根据默认排序结果获取集合中的最大值 public static <T> T max(Collection<?> coll) //随机置换,可以用来洗牌 public static void reverse(List<?> list) //反转集合 public static void shuffle(List<?> list) //随机置换,可以用来洗牌 [70]: /images/20220521/4bb08f8821134639a02ae8839e2d387d.png [70 1]: /images/20220521/d7c71d9f5ec542e6a7b444d9ee4f579d.png
相关 java——集合——Map集合——Map集合的概述 ![785798b9f16983d2b4fa11f74c94630b.png][] ![c245c791968681286d734a72d714b18a.png][] [ 快来打我*/ 2024年03月31日 09:42/ 0 赞/ 141 阅读
相关 Map集合 Map集合没有继承 Collection接口,其提供的是key到value的映射。Map中不能包含相同的key值,每个key只能映射一个value,key决定了存储对象在映射中 约定不等于承诺〃/ 2022年07月19日 02:52/ 0 赞/ 235 阅读
相关 Map集合 Map Map接口是一种双列集合,它的每个元素都包含一个键对象Key和一个值对象Value,键和值对象之间存在一种对应关系,称为映射。一个映射不能包含重复的键,每个键最多 叁歲伎倆/ 2022年07月12日 04:47/ 0 赞/ 293 阅读
相关 Map集合 / Map集合:该集合存储键值对。一对一对往里存,而且保证键的唯一性。 1:添加 put(K key,V value); putAl 末蓝、/ 2022年06月17日 01:23/ 0 赞/ 231 阅读
相关 Map集合 Map集合 一、Map集合概述和特点 1,概述 \将键映射到值的对象 \一个映射不能包含重复的键 \每一个键最 我不是女神ヾ/ 2022年05月21日 13:18/ 0 赞/ 290 阅读
相关 Map集合 【前言】 1.Map 用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里key,另外一组值用于保存Map里的value,key和value都可以 ゞ 浴缸里的玫瑰/ 2022年05月19日 23:14/ 0 赞/ 312 阅读
相关 map集合 Map集合的特点: 将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值 Map集合和Collection集合的区别? Map集合存储元素 向右看齐/ 2022年05月17日 04:07/ 0 赞/ 271 阅读
相关 Map集合 Map集合 (一)Map集合 1.Map集合的特点; 可以储存键映射到值得对象,且一个映射不能包含重复的键,每个键最多只能映射到一个值 只和键有关和值没有关系 深藏阁楼爱情的钟/ 2021年11月29日 12:04/ 0 赞/ 436 阅读
还没有评论,来说两句吧...