Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346765
  • 博文数量: 26
  • 博客积分: 169
  • 博客等级: 入伍新兵
  • 技术积分: 516
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-29 23:53
个人简介

爱工作,爱生活,更爱自由的程序媛,坚持最初的梦想,做最好的自己!

文章分类

全部博文(26)

文章存档

2014年(16)

2013年(3)

2012年(7)

我的朋友

分类: Android平台

2014-03-19 22:13:59

Collection总结:
关于集合中比较重要的HashSet,HashMap,HashTable,ArrayList,LinkedList,Vector的区别和用法,

这些概念很容易混淆,内部的原理也不是了解的特别深入。
java面试的过程中常考类型,也是我们平时堆代码时要特别注意的地方。


  1. /**
  2.      * HashSet:底层是用哈希算法实现的,里面没有重复的元素
  3.      * Map中的元素是“键-值”对,其中“键”必须是唯一的,它把set中的元素作为Map中的“键”,从而保持元素的唯一性。
  4.      * HashSet中是采用了比较元素hashCode的方法来判断元素是否相同(duplicate),而不是采用其他类似equals之类的东东来判断
  5.      */
  6.     public void setTest() {
  7.         HashSet<String> set=new HashSet<String>();
  8.         set.add("abc");
  9.         set.add("abc");
  10.         System.out.println(set);
  11.         for(Iterator<String> it=set.iterator();it.hasNext();) {
  12.             System.out.println(it.next());
  13.         }
  14.     }
  15.     
  16.     /**
  17.      * 轻量级,线程不安全,键和值都可以为空。
  18.      */
  19.     public void mapTest() {
  20.         HashMap<String, String> map=new HashMap<>();
  21.         map.put("a", "1");
  22.         map.put("b", "2");
  23.         map.put(null, null);
  24.         for(Entry<String, String> entry:map.entrySet()) {
  25.             System.out.println(entry.getKey()+entry.getValue());
  26.         }
  27.         
  28.         for(Object obj:map.keySet()) {
  29.             Object value=map.get(obj);
  30.             System.out.println(value);
  31.         }
  32.     }
  33.     
  34.     /**
  35.      * 重量级,线程安全,键和值不能为空,如果传入的键或值为空的话,就会报空指针异常。
  36.      */
  37.     public void tableTest() {
  38.         Hashtable<String, String> table=new Hashtable<>();
  39.         table.put("c", "3");
  40.         table.put("d", "4");
  41. //        table.put(null, null);
  42.         Enumeration<String> en=table.keys();
  43.         while(en.hasMoreElements()) {
  44.             System.out.println(en.nextElement());
  45.         }
  46.         en=table.elements();
  47.         while(en.hasMoreElements()) {
  48.             System.out.println(en.nextElement());
  49.         }
  50.     }
  51.     
  52.     /**
  53.      * ArrayList:底层是用数组实现的,查询快,增删慢,线程不安全,轻量级。
  54.      */
  55.     public void arrayTest() {
  56.         ArrayList<String> arrays=new ArrayList<>();
  57.         arrays.add("liuliu");
  58.         arrays.add("fanfan");
  59.         arrays.add(0, "mige");
  60.         for (Iterator<String> iterator = arrays.iterator(); iterator.hasNext();) {
  61.             String arr = (String) iterator.next();
  62.             System.out.println(arr);
  63.         }
  64.     }
  65.     
  66.     /**
  67.      * LinkedList:底层用双向循环链表,查询慢,增删效率快
  68.      */
  69.     public void linkedTest() {
  70.         LinkedList<String> linked=new LinkedList<>();
  71.         linked.add("zt");
  72.         linked.add("taotao");
  73.         linked.add(0, "zhuzhu");
  74.         for (String lin : linked) {
  75.             System.out.println(lin);
  76.         }
  77.     }
  78.     
  79.     /**
  80.      * Vector:重量级,线程安全,底层用数组实现,占据更多的系统开销,如果涉及到多线程,可以选用这个
  81.      */
  82.     public void vetorTest() {
  83.         Vector<String> vector=new Vector<>();
  84.         vector.add("qin");
  85.         vector.add("ai");
  86.         vector.add(0, null);
  87.         for (String ve : vector) {
  88.             System.out.println(ve);
  89.         }
  90.     }
PS:不放过任何一个技术点,细节很重要,注重细节。

阅读(8320) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~