Java中的一些集合

来源:互联网 发布:win8没有网络怎么办 编辑:程序博客网 时间:2024/04/26 10:50

      对于我写的东西,都是我对学习中的一些理解。希望可以给同我一样的人带来帮助。本人才疏学浅,如果有错误请纠正。

      先说说集中常见的集合。Set、List、HashMap、Hashtable、HashSet、LinkedHashMap、LinkedHashSet、TreeSet、TreeMap、Vector、ArrayList。这是我所知道的一些集合操作,如果还有更多的请大家来补充,关于这些我们先慢慢的分析一下。

       首先说说关于Set,List。这两者的区别就是Set是没有顺序的,在向里面放数据的时候,不能出现相同的元素。而List呢则是有顺序的,往里面放数据的时候呢,可以出现相同的元素,因为他是有顺序的可以把相同的元素分开,所以其中才允许插入相同的元素。

       HashMap,Hashtable,HashSet这三个呢,其中HashMap与Hashtable都是Map的接口类,用唯一的键对应相应的值上。这里还要注意的是呢,我们写代码的时候就可以看出来,HashMap呢输出的时候没有顺序,而Hashtable是同步的也就是有顺序的,感兴趣的朋友呢,可以用代码实现下。而且,关于Map这种键值对应写代码的时候呢。要先对键进行遍历,然后进行迭代,随后根据键取中相应的值。而HashSet就是哈希表与set方式的结合体,具体的解释呢我也不太会说,只要会用就可以了。当作Set一样用。

       下面还有两个相对的。一个是TreeMap一个是TreeSet。这两个我们可以先从单词上面分析,Tree就是树,我们用代码实验的时候就会发现,这两个都是有序呢。这个TreeMap就和Hashtable一样是有序的。

       下面呢我们在分析下,ArrayList和Vector还有LinkedList这三者,我们可以看出呢他们都是List的接口类,也就是说,他们在存储的过程中呢都是有序的。但是我们仍然需要注意的是呢。三者选择存储数据的时候存储方式是不同的。前两者采用的是数组的存储方式,他们实际所能存储的数据肯定是比存储的数据多,这样方面他们进行删除与插入操作,他们就是索引功能较强,插入性能较差,而Vector呢,虽然采用了数据的存储方式,但是性能上他还是比ArrayList差的。因为他采用了线程安全这个方法。所以性能相对于ArrayList差点。而LinkedList采用的是双向链表的存储方式,所以他的插入性能较强,而索引性能较弱。

 

        这是几个常用的集合。可能初学者刚开始一听的时候是比较乱的,下面呢我们可以归纳旅顺一下。

        1.如果这个集合名字上面有Map,那么他就是采用的是那种键值对应的那种方式的。一个例外就是Hashtable

        2.如果这个名字上面呢有List,那么他存储的时候呢就是有序的,也有一个例外呢就是Vector

        3.如果这个名字上面有Set,那么他存储的时候就是无序的。

        4.如果名字上面带有Linked***那么他就采用的是链表的存储方式。

        5.两个例外TreeMap与TreeSet。都是有序呢。这样看起来是不是很直观了呢?

 

 

下面一个代码小例子,就是Map接口类的时候怎样对键进行遍历,迭代

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class HashMapTest {

 public static void main(String args[]) {

  HashMap hm = new HashMap();

  hm.put("k1", "1");
  hm.put("k2", "2");
  hm.put("k3", "3");
  hm.put("k4", "4");
  hm.put("k5", "5");
  hm.put("k6", "6");

  Set key = hm.keySet();

  Iterator it = key.iterator();

  while (it.hasNext()) {

   String keyNumber = (String) it.next();
   System.out.println("键" + keyNumber);

   String value = (String) hm.get(keyNumber);
   System.out.println("值" + value);
  }

 }

}