黑马程序员技术交流社区

标题: 【Android】Java基础集合与泛型知识点梳理 [打印本页]

作者: Android_Robot    时间: 2016-5-19 12:21
标题: 【Android】Java基础集合与泛型知识点梳理

涨薪机密——潮流新技术、新框架资源以后不定期更新,
   
一、Collection集合

(1)集合的由来
           我们学习的是面向对象的语言,而面向对象的语言常见的操作就是操作对象。
           为了方便我们对多个对象进行操作,我们可以使用对象数组来进行。
           但是对象数组的长度是固定的,不适应变化的需求,所以,java就提供了集合供我们来使用。

(2)集合的特点
           A:长度可变
           B:只能存储引用类型
           C:可以存储多种引用类型

(3)数组和集合的区别
          A:数组的长度固定;数组可以存储基本类型,也可以存储引用类型;数组存储的是同一种数据类型的元素
          B:集合的长度可变;集合只能存储引用类型;集合可以存储多种引用类型。

(4)集合的继承体系结构
          多种集合类的数据结构不同,但是功能相似,所以,我们不断的向上抽取,就形成了集合的继承体系结构
              Collection
                     |--List
                            |--ArrayList
                            |--Vector
                            |--LinkedList
                     |--Set
                           |--HashSet
                           |--TreeSet

  面对这样的继承体系结构,我们该学习谁,使用谁呢?
   学习:顶层,因为顶层定义的是共性功能。
   使用:底层,因为底层才是具体的实现类,并且具有最多的功能。

(5)Collection的功能概述:
     A:添加功能
        boolean add(Object obj):往集合中添加一个元素
        boolean addAll(Collection c):往集合中添加多个元素。
    B:获取功能
         Iterator iterator():迭代器
         int size():集合的元素个数,长度
   C:删除功能
         void clear():清空集合的所有元素
         boolean remove(Object obj):从集合中移除一个元素
         boolean removeAll(Collection c):从集合中移除多个元素
   D:判断功能
         boolean contains(Object obj):判断集合中是否包含指定的元素
         boolean containsAll(Collection c):判断集合中是否包含指定的多个元素
         boolean isEmpty():判断集合是否为空
   E:交集元素
        boolean retainAll(Collection c)
   F:转数组
       Object[] toArray():把集合转成对象数组
(6)迭代器的使用
  A:迭代器的使用
       依赖于集合存在,本身有两个方法
       a:hasNext()
       b:next()
  B:集合的使用步骤
       a:创建集合对象
       b:创建元素对象
       c:把元素添加到集合中
       d:遍历集合
           通过集合对象获取迭代器对象
           通过迭代器对象的hasNext()方法判断是否有元素
           通过迭代器对象的next()方法获取元素,并移动到下一个位置
  C:迭代器的原理
      定义为了接口,由具体的集合类通过内部类的方式提供实现。
(7)案例:
  A:Collection存储字符串并遍历
  1. Collection c = new ArrayList();

  2. c.add("hello");
  3. c.add("world");
  4. c.add("java");

  5. Iterator it = c.iterator();
  6. while(it.hasNext()) {
  7.      String s = (String) it.next();
  8.      System.out.println(s);
  9. }
复制代码

  B:Collection存储自定义对象并遍历
  1. public class CollectionTest {
  2.      public static void main(String[] args) {
  3.           // 创建集合对象
  4.            Collection c = new ArrayList();</P>
  5.        // 创建元素对象
  6.           Student s1 = new Student("林黛玉", 18);
  7.           Student s2 = new Student("秦可卿", 20);
  8.           Student s3 = new Student("王熙凤", 22);</P>
  9.     // 把学生对象添加到集合
  10.           c.add(s1);
  11.           c.add(s2);
  12.           c.add(s3);
  13.      // c.add(new Student("贾宝玉", 20));
  14.     // 遍历集合
  15.          Object[] objs = c.toArray();
  16.          for (int x = 0; x < objs.length; x++) {
  17.         Student s = (Student) objs[x];
  18.         System.out.println(s.getName() + "---" + s.getAge());
  19.          }
  20.     }
复制代码
二、List集合
(1)List集合的特点       元素有序(存储顺序和取出顺序一致),可重复。

(2)List集合的特有功能
         A:add(int index,Object obj)
         B:remove(int index)
         C:get(int index)
         D:set(int index,Object obj)
         E:listIterator()

(3)List集合的特有遍历功能
         通过size()和get()方法结合即可

(4)ListIterator的概述和使用
         A:ListIterator是Iterator的子接口
         B:ListIterator可以逆向遍历,但是意义不大。
                因为它需要先正向遍历。
        C:并发修改异常产生的原因和解决方案
               a:原因
                   用迭代器遍历集合的时候,用集合去修改了集合的元素。
              b:解决方案
                   用普通for遍历,并用集合去添加元素
                   用列表迭代器遍历,并用列表迭代器去添加元素

(5)案例:
  A:List存储字符串并遍历
  1. List list = new ArrayList();

  2. list.add("hello");
  3. list.add("world");
  4. list.add("java");

  5. Iterator it = list.iterator();
  6. while(it.hasNext()) {
  7.       String s = (String) it.next();
  8.       System.out.println(s);
  9. }

  10. for(int x=0; x<list.size(); x++) {
  11.        String s = (String) list.get(x);
  12.        System.out.println(s);
  13. }
复制代码

     B:List存储自定义对象并遍历
           自定义对象:Student(name,age)
  1. public class ListDemo {
  2.           public static void main(String[] args) {
  3.          // 创建集合对象
  4.           List list = new ArrayList();

  5.            // 创建学生对象
  6.              Student s1 = new Student("潘金莲", 18);
  7.              Student s2 = new Student("孙二娘", 19);
  8.              Student s3 = new Student("扈三娘", 20);
  9.              Student s4 = new Student("李师师", 21);

  10.           // 把元素添加到集合
  11.            list.add(s1);
  12.            list.add(s2);
  13.            list.add(s3);
  14.            list.add(s4);

  15.           // 遍历集合
  16.          Iterator it = list.iterator();
  17.           while (it.hasNext()) {
  18.                   Student s = (Student) it.next();
  19.                    System.out.println(s.getName() + "---" + s.getAge());
  20.          }
  21.      }
  22. }
复制代码
【穿插知识】数据结构
(1)面试题:常见的数据结构有哪些?以及每种数据结构的优缺点?
(2)数据结构
        A:栈
            先进后出
        B:队列
           先进先出

  C:数组
          查询快,增删慢
  D:链表
        查询慢,增删快

(6)List的三个实现类
          1.List的三个实现类特点
                A:ArrayList
                        底层数据结构是数组,查询快,增删慢
                        线程不安全,效率高
               B:Vector
                        底层数据结构是数组,查询快,增删慢
                        线程安全,效率低
               C:LinkedList
                       底层数据结构是链表,查询慢,增删快
                       线程不安全,效率高
            2.你如何选择哪个儿子进行使用?
                看情况。
                要安全吗?
                        要:Vector(其实也不用这个有更好的方式,后面讲)
                       不要:ArrayList和LinkedList
                       查询多:ArrayList
                       增删多:LinkedList
                       如果你什么都不知道,就用ArrayList。
         3.ArrayList
                 A:存储字符串并遍历
                 B:存储自定义对象并遍历
          4.Vector
                 A:特有功能
                        a:addElement(object obj) -- add()
                        b:elementAt(int index)  -- get()
                       c:elements()   -- iterator()
                 B:存储字符串并遍历
                 C:存储自定义对象并遍历
        5.LinkedList
               A:特有功能
                        a:addFirst(),addLast()
                        b:removeFirst(),removeLast()
                       c:getFirst(),getLast()
             B:存储字符串并遍历
             C:存储自定义对象并遍历
       6.案例:
                A:去除ArrayList集合中重复字符串
                B:去除ArrayList集合中重复自定义对象
                             contains()方法的底层源码是equals()
                C:用LinkedList模拟栈数据结构的集合,并测试

三、泛型
(1)泛型:是一种把明确数据类型的工作推迟到创建对象或者调用方法的时候采取明确的特殊的数据类型。
(2)格式:
       <数据类型>
(3)好处:
           A:提高了程序的安全性
           B:把运行时期异常提前到了编译期
           C:避免了强制类型转换
(4)在哪些地方使用泛型?
             看API即可,如果类,抽象类,接口后面跟有<...>说明这里需要使用
(5)泛型的由来
         A:泛型的由来
         B:泛型类
         C:泛型方法
         D:泛型接口
         E:泛型高级
(6)案例:
          把前面的集合案例用泛型改进。
          底层数据结构是数组,查询快,增删慢
           线程安全,效率低
  部落与荣耀:拥有一个足以让你自豪的薪资——Android76—83期连续霸(8)气(期)平均薪资超11K!
[持续更新]2016最新Android视频教程+源码+技巧/经验+软件+面试
【Android】Android是选择自学还是选择培训?


作者: Android_Robot    时间: 2016-5-19 12:47
案例详细代码和迭代器原理与案例代码,如果有需要的留言,会在楼下贴出来
作者: ajj1314    时间: 2016-5-19 21:47
已收藏,感谢楼主,以后有不会的问题还得有劳楼主解答{:2_33:}
作者: hjbing456    时间: 2016-5-19 22:33
总结的真好
作者: 杨洛神    时间: 2016-5-21 00:06
                          收藏
作者: 罗勇    时间: 2016-5-21 16:19
先收藏,慢慢看
作者: yangyaoguang    时间: 2016-5-21 22:38
真的是好东西呀,看一遍相当于是复习了,赞!
作者: Restart-D    时间: 2016-5-22 12:08
这个总结真好,看一遍算是复习了
作者: zhouhp    时间: 2016-5-23 11:40
还没学到这里,感觉不错,收藏
作者: 琥珀    时间: 2016-5-23 22:07
很不错,收藏了
作者: LRBlucky    时间: 2016-5-24 18:07
太有用了赞赞赞
作者: tianzhu2725    时间: 2016-5-24 21:47
感谢分享感谢分享
作者: feey    时间: 2016-5-24 22:21
谢谢分享
作者: z736886202    时间: 2016-5-24 22:27
复习下  水一个  ..打酱油去
作者: okchenyang44    时间: 2016-5-24 22:46
复习下  水一个  ..打酱油去
作者: 驰马定中原    时间: 2016-5-24 23:00
感谢楼主总结,并将资源共享
作者: sunchanglt    时间: 2016-5-24 23:01
总结的不错 用处蛮大  赞一个
作者: 975298245    时间: 2016-5-25 17:14
实用,赞赞赞
作者: 张可可    时间: 2016-5-25 22:33
精华 之言  过客 流年
作者: ︶夜戏乀梦红尘    时间: 2016-5-25 22:38
哇,好分享
作者: sunchanglt    时间: 2016-5-25 23:31
总结的很到位  很有帮助 点个赞

作者: hmCEO    时间: 2016-5-26 00:03
辛苦了同志
作者: TS-松子    时间: 2016-5-26 00:07
非常有用。
作者: huburt    时间: 2016-5-26 07:41
总结太完善了!
作者: 68846259    时间: 2016-5-26 08:21
mark......

作者: 68846259    时间: 2016-5-26 08:27
mark........
作者: 68846259    时间: 2016-5-26 08:30
mark.................
作者: 68846259    时间: 2016-5-26 08:42
mark.................
作者: 68846259    时间: 2016-5-26 08:44
mark................
作者: My_Android    时间: 2016-5-26 08:58
get到新的知识点
作者: itlf    时间: 2016-5-26 22:33
感谢楼主!!
作者: liukai3385    时间: 2016-5-26 22:40

作者: zhglyxgs    时间: 2016-5-26 22:43
持续涨知识中
作者: wei19910428    时间: 2016-5-28 00:10
好啊,以收藏了,感谢分享
作者: ygxheima    时间: 2016-5-28 21:42
学到了,看了这篇帖子,感觉又长知识了
作者: itlf    时间: 2016-5-28 21:44
我就是顶一下而已
作者: static小白    时间: 2016-5-28 22:09
说实话,还没学到这里,不过看看总没坏处啊
作者: guolongfei344    时间: 2016-5-28 22:37
大神级的总结,感谢!
作者: yuxing    时间: 2016-5-29 17:57
收藏看着~~
作者: ljd    时间: 2016-5-29 19:56
不错,很全面,要是再加上Map集合就更好了
作者: JohnChan    时间: 2016-5-29 21:35
打个酱油去
作者: Kingchen    时间: 2016-5-29 22:14
顶一下!
作者: MrDevil    时间: 2016-5-29 22:19
可以可以可以
作者: 学渣一枚    时间: 2016-5-31 12:09
很详细.......
作者: wangzifei    时间: 2016-5-31 13:00
很详细,很受用!
作者: 风起tiannan    时间: 2016-5-31 18:06
复习一下
作者: 孟小垚    时间: 2016-5-31 20:24
顶,楼主!!!
作者: Deleba    时间: 2016-5-31 21:27
好贴,赞一个
作者: xuemingqiang    时间: 2016-5-31 22:30
帮助很大,学习了很多,支持版主的持续更新
作者: Curvat    时间: 2016-6-1 10:18
很不错,收藏了
作者: 武汉丶小熊    时间: 2016-6-1 10:25
真的是好东西呀,看一遍相当于是复习了,赞!
作者: 1985206835long    时间: 2016-6-1 10:35
很好赞一个
作者: jialp1024    时间: 2016-6-1 14:52
顶顶赞一个!!!!
作者: 云袭    时间: 2016-6-1 19:55
很黑强大!
作者: likonglin110    时间: 2016-6-1 22:51
哇~~好东西啊
作者: chaos1234    时间: 2016-6-1 23:19
总结的不错,赞一个
作者: 443785417    时间: 2016-6-1 23:29
多谢分享,总结
作者: A昌_e244R    时间: 2016-6-2 09:00
感谢分享,赞一个!!
作者: 善良的死神达乐    时间: 2016-6-3 00:09
收藏中.....加油加油..........
作者: 814506914    时间: 2016-6-3 22:18
谢谢大神分享
作者: WemtFox    时间: 2016-6-3 22:28
太有用了,谢谢楼主分享
作者: 阿姆1Q84    时间: 2016-6-3 23:22
谢谢分享.!!
作者: huhemingtiancai    时间: 2016-6-3 23:32
一起努力,加油啊!
作者: li771735606    时间: 2016-6-4 13:56
背背背背背
作者: 流离岁月    时间: 2016-6-4 20:47
正在学集合,挺详细的啊
作者: 学渣一枚    时间: 2016-6-4 21:14
赞赞赞赞赞赞赞赞赞赞
作者: tianzhu2725    时间: 2016-6-4 21:38
感谢分享
作者: 001jiaojiao    时间: 2016-6-4 22:26
好详细,刚好学到泛型,谢谢
作者: 虾米1995丶    时间: 2016-6-4 22:28
谢谢分享,已收藏!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: Hyperion    时间: 2016-6-4 22:39
记录一下
作者: java25    时间: 2016-6-4 22:49
这个帖子太给力了,集合学得人都糊涂了。
作者: vvvvvc    时间: 2016-6-4 23:28
梳理的很详细,学到了
作者: Ar_Vic    时间: 2016-6-5 06:52
感谢分享!
作者: huxiaoyong888    时间: 2016-6-5 11:14
很有用,多谢楼主
作者: 刘超杰    时间: 2016-6-5 15:31
辛苦版主了,总结的很全面~~~~~~
作者: wuzlhi    时间: 2016-6-5 22:28
受教了,最近刚好学到这些,正好派上用场,O(∩_∩)O哈哈~
作者: 1985206835long    时间: 2016-6-6 11:19
很好!一起学习!!
作者: a820290471    时间: 2016-6-6 14:28
写的真好,很给力,顶起
作者: 孟小垚    时间: 2016-6-6 18:41
复习一下,楼主好人啊!
作者: 恐高的鸟    时间: 2016-6-7 00:30
可以可以 楼主总结的不错。。。6666
作者: 1985206835long    时间: 2016-6-7 08:51
很好,很好!继续学习
作者: tuan2016    时间: 2016-6-8 22:30
感谢分享,辛苦了
作者: 犹豫的烤肉拌饭    时间: 2016-6-8 23:50
谢大神赐教!!!
作者: 我是你岁哥❤环    时间: 2016-6-9 00:51
马上就要学习了,先mark一下
作者: java25    时间: 2016-6-9 11:45
在集合这卡了好久了,收藏,谢谢楼主!!
作者: LCR    时间: 2016-6-9 14:13
不错,不错,好的分享
作者: wz18706    时间: 2016-6-9 15:20
又看了一遍    收货良多
作者: cuisq    时间: 2016-6-10 14:01
好像和笔记里的差不多啊
作者: 欧胤祥    时间: 2016-6-10 14:10
整理得非常详细,很给力!
作者: 18634319112    时间: 2016-6-10 23:12
收藏了,刚学到这里
作者: 729685305    时间: 2016-6-11 22:16
如何学习java呢           
作者: haojingwei310    时间: 2016-6-11 22:22
先收藏,慢慢看
作者: 皮卡丘2016    时间: 2016-6-12 00:08
刚好学到数组这里,赞一个
作者: 欧胤祥    时间: 2016-6-12 00:48
给力,很详细
作者: 数码店    时间: 2016-6-12 16:10
赞赞赞赞赞赞
作者: 443785417    时间: 2016-6-13 18:55
不错不错
作者: jannnonx    时间: 2016-6-14 00:05
集合大法好哇,留着多看看领会,谢谢楼主!
作者: 491482538    时间: 2016-6-14 22:19
先留着,收藏着
作者: SQQ    时间: 2016-6-15 16:40
谢谢分享
作者: wby127889561    时间: 2016-6-15 21:57
谢谢了,正在找呢




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