黑马程序员技术交流社区

标题: (主推)集合框架一:集合的概念|特点|与数组区别|框架图|共. [打印本页]

作者: 朱晓杰    时间: 2013-5-10 20:52
标题: (主推)集合框架一:集合的概念|特点|与数组区别|框架图|共.
本帖最后由 朱晓杰 于 2013-5-10 20:51 编辑

                               集合的概念、特点、与数组区别、框架图、共性方法
一、    集合框架概述
1、 集合概念
       集合同数组一样,都是容器,数组用于存储、获取、操作对象,那么集合就是用于存储、获取、操作不同引用类型的数据,可以看作是动态的数组。
      怎么理解呢?
      哆啦A梦拥有一个令人羡慕嫉妒恨的百宝袋,可以存放很多各种各样有趣的宝贝,比如竹蜻蜓,四通八达门,时间隧道…而且不用担心放不下。我想集合就类似与百宝袋,可以存放各种引用类型的数据,String,Integer…
2、集合特点及与数组的区别
       集合的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型对象。
     与数组的区别:数组可以存储任意的数据类型,但是一个数组只能存储同一种数据类型的数据,数组长度是固定的,并且
                                  作数组时容易出现ArrayIndexOfBoundsException(角标越界)异常。
                            集合只能存储对象,但是集合长度是可变的 ,一个集合可以存储不同类型的对象。
3、集合框架图

               
       主要集合类简单描述:
                    List接口:继承 Collection,允许重复,有序集合,可以通过索引来访问指定位置的集合元素(顺序索引从0开始),
                                   List集合默认按元素的添加顺序来设置元素的索引
               ArrayList:基于数组实现,方便查找,JDK1.2,线程不安全
               LinkedList:基于链表实现,方便增加、删除元素
               
               Set接口:继承 Collection,但不允许重复,无序集合(存入与取出的顺序不一定一致),拥有自己的内部排列机制
               HashSet:基于哈希表实现,是线程不安全的
               TreeSet:基于二叉树实现,是线程不安全的
               
               Map接口:一组成对的键-值对象,Map中不能有重复的键,拥有自己的内部排列机制
               HashMap:基于哈希表实现,是线程不安全的
               TreeMap:基于二叉树实现,是线程不安全的
               
               Iterator接口:迭代器,实现对集合中元素的遍历操作,很好的体现了内部类的设计
                     使用迭代器的步骤:
                     1.调用iterator()获得集合的Iterator;
                     2.使用循环不断调用hasNext()方法,判断是否还有元素;
                     3.在循环体内,调用next()方法获取每个元素
               ListIterator:获取List的迭代器
4、共性内容
               
             基本的方法的使用,大家可以在API里面找到详细解释,下面以List,Set,Map集合中经常使用的
           ArrayList,HashSet,HashMap集合为例进行遍历:
           1. for循环遍历集合
           2. 迭代器的使用
           3. 增强型for循环的使用(注意:在遍历的过程中,不能对集合本身进行操作)



作者: 朱晓杰    时间: 2013-5-10 20:52
本帖最后由 朱晓杰 于 2013-5-10 22:38 编辑
  1. import java.util.*;
  2. import static java.lang.System.*;//静态包导入
  3. public class ArrayListDemo {

  4.         public static void main(String[] args) {
  5.                
  6.                 ArrayList<String> al = new ArrayList<String>();
  7.                
  8.                 //添加元素
  9.                 al.add("张三");
  10.                 al.add("李四");
  11.                 al.add("王五");
  12.                 al.add("赵六");
  13.                
  14.                 //for循环遍历集合
  15.                 //注意:List中拥有自己特殊的方法get(int index)
  16.                 for(int i = 0; i < al.size(); i++){
  17.                         out.println("for..." + al.get(i));
  18.                 }
  19.                
  20.                 //iterator的使用
  21.                 Iterator<String> it = al.iterator();
  22.                 while(it.hasNext()){
  23.                         out.println("iterator..." + it.next());
  24.                 }
  25.                
  26.                 //listIterator的使用
  27.                 ListIterator<String> listIt = al.listIterator();
  28.                 while(listIt.hasNext()){//顺向遍历
  29.                         out.println("listIterator..." + listIt.next());
  30.                 }
  31.                 while(listIt.hasPrevious()){//逆向遍历
  32.                         out.println("listIterator..." + listIt.previous());
  33.                 }
  34.                
  35.                 //高级for循环
  36.                 for(String name : al){
  37.                         out.println("foreach..." + name);
  38.                 }
  39.         }
  40. }
  41. //HashSet遍历:
  42. import java.util.*;
  43. import static java.lang.System.*;
  44. public class HashSetDemo {

  45.         public static void main(String[] args) {
  46.                
  47.                 HashSet<Integer> hs = new HashSet<Integer>();
  48.                
  49.                 //添加元素
  50.                 hs.add(3);
  51.                 hs.add(5);
  52.                 hs.add(7);
  53.                 hs.add(6);//自动装箱
  54.                
  55.                 //iterator的使用
  56.                 Iterator<Integer> it = hs.iterator();
  57.                 while(it.hasNext()){
  58.                         out.println("iterator..." + it.next());
  59.                 }
  60.                
  61.                 //高级for循环
  62.                 for(Integer num : hs){
  63.                         out.println("foreach..." + num);
  64.                 }
  65.         }
  66. }

  67. //HashMap遍历:
  68. import java.util.*;
  69. import static java.lang.System.*;
  70. public class HashMapDemo {

  71.         public static void main(String[] args) {

  72.                 HashMap<String,Integer> hm = new HashMap<String,Integer>();
  73.                
  74.                 //添加元素
  75.                 hm.put("zxj", 22);
  76.                 hm.put("wxp", 19);
  77.                 hm.put("hyd", 20);
  78.                 hm.put("lv", 11);
  79.                
  80.                 //keySet
  81.                 Set<String> keySet = hm.keySet();//返回所有键的集合
  82.                
  83.                 Iterator<String> key = keySet.iterator();
  84.                
  85.                 while(key.hasNext()){
  86.                         String jian = key.next();//键
  87.                         Integer zhi = hm.get(jian);//值
  88.                         out.println("keySet..." + jian + "=" + zhi);
  89.                 }
  90.                
  91.                 //entryset
  92.                 Set<Map.Entry<String, Integer>> entrySet = hm.entrySet();//返回所有键值对的映射关系
  93.                
  94.                 Iterator<Map.Entry<String, Integer>> entry = entrySet.iterator();
  95.                
  96.                 while(entry.hasNext()){
  97.                         Map.Entry<String, Integer> map = entry.next();
  98.                         String jian = map.getKey();//键
  99.                         Integer zhi = map.getValue();//值
  100.                         out.println("entrySet..." + jian + "=" + zhi);
  101.                 }
  102.         }
  103. }
复制代码

作者: 朱晓杰    时间: 2013-5-10 20:59
尹桥印 发表于 2013-5-10 20:56
版主啊,这个要加5分技术分啊~~~

:D   不要这的么,有什么总结不全的地方还请你指出来!大家一起探讨学习!
作者: 曹睿翔    时间: 2013-5-10 21:18
这个加不了五分的,哈哈,跟普通博客水平相当。大家的博客都总结的很好
我想看到的是后几篇总结的,关于集合应用和集合中容易出现的问题、难点,相当费神!
那时才会多加
楼主注意了,敢于挑战!
作者: 朱晓杰    时间: 2013-5-10 22:19
曹睿翔 发表于 2013-5-10 21:18
这个加不了五分的,哈哈,跟普通博客水平相当。大家的博客都总结的很好
我想看到的是后几篇总结的,关于集 ...

明白,这个只是一个简单的,后面的得更加专注来搞了!
作者: 陈进    时间: 2013-5-10 23:31
楼主辛苦了,好好学习,走起。。。。
作者: hou604720966    时间: 2013-5-11 09:54
朱晓杰 发表于 2013-5-10 20:52

朱: 你写的集合采用了泛型,最好标注上是JDK1.5的新特性
作者: 朱晓杰    时间: 2013-5-11 09:56
hou604720966 发表于 2013-5-11 09:54
朱: 你写的集合采用了泛型,最好标注上是JDK1.5的新特性

搜噶,也是哈...不过我想的是后面专门整理总结一下泛型!
作者: 朱晓杰    时间: 2013-5-11 09:56
陈进 发表于 2013-5-10 23:31
楼主辛苦了,好好学习,走起。。。。

:handshake   潇洒的走起!
作者: hou604720966    时间: 2013-5-11 11:18
朱晓杰 发表于 2013-5-11 09:56
搜噶,也是哈...不过我想的是后面专门整理总结一下泛型!

慢慢整理吧,结合一些工作经验应该是比较不错的。。。努力吧!!!
作者: 丘凤光    时间: 2013-5-11 14:12
参与活动的要自己开帖给答案?
作者: 朱晓杰    时间: 2013-5-11 15:00
丘凤光 发表于 2013-5-11 14:12
参与活动的要自己开帖给答案?

直接发帖就可以




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2