`

黑马程序员--java基础复习--集合

阅读更多

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ---------------------

一、集合概述

   1、集合与数组的比较:

   首先要明白数据在计算机中的存储方式,常用的有数组、链表、哈希表和二叉树等。

   所有的数组都用数组这个方式存储数据,这种方式查询快,但是插入、删除慢,而且是不可变长度的(数组的扩容其实是建立一个新的数组,增加原来数组的一半或者全长,然后将老数组中的数据copy到新数组中)

   而集合则比较全面了,集合里边有各种底层实现方式,比如底层为数组的ArrayList、底层为链表的LinkedList、底层为哈希表的HashSet和HashMap,还有底层为二叉树的TreeSet和TreeMap。

   集合在使用的时候不用考虑长度问题,即使是底层用数组实现的ArrayList也已经在内部封装好了自动扩容的功能,而且集合还能把不同的对象装在一起。

  

   2、集合的特点
  • 集合作为容器可以分为很多种,如水杯就有很多种。
    • 多种集合的共性抽取,就是集合框架:Collection。 抽取的不一定能创建对象,所以需要参阅顶层创建子类对象。
    • 集合中元素取出方式:迭代器、遍历、for循环、按角标索引 、枚举

   3、集合框架

 

 其中list是存入取出有序的(按角标),允许有重复元素

set是存入无序,不允许有重复元素,其实取出是有序的(HashSet按哈希值来取出,TreeSet按比较顺序来取出)

集合共性方法:

  • 1.add方法: add方法的参数类型是Object,以便于接受任意类型对象。
  • 2.集合中存储的都是对象中的引用(地址)。
    • 栈里存放集合和数据对象的引用,堆中存放集合对象(包含数据对象的引用)、数据对象。
  • 3.删除元素。
    • remove("java02");//删除java02这个元素。
    • clear(); //清空
  • 4.判断元素
    • al.contains("java02");//java02是否存在。
    • al.isEmpty();//al是否为空。
  • 5.取交集retainAll
    • al1.tetainAll(al2);//取交集,没交集为空。

二、怎么使用集合

   集合除了共性的增删改查方法外,还有一个共性的itrator方法,而且对于单列集合还可以使用collections的enumeration方法来获得对应的枚举迭代器,所以遍历集合的方法时非常多的。

   用Iterator遍历集合时,只能用Iterator的方法来操作集合,不能用集合的方法来操作集合,因为会出现并发访问集合的安全问题,而Iterator中只有一个remove方法能对集合中的元素进行操作。

   在ArrayList和LinkedList中还可以用ListIterator来遍历集合,这时候就可以有更多的操作了,比方说添加、修改等等。

   在Map集合中,遍历就麻烦一点,有两种方法:keySet和entrySet,keySet是先拿到键的集合,再遍历键的集合时根据键找值,而entrySet则是直接遍历键值对。

 

三、各种集合使用需要注意的问题

  当我们选定一个集合来使用的时候,必须要知道为什么使用这个集合,然后使用这个集合能达到什么效果,达到这个效果要符合什么条件。下面我一一列出来

  ArrayList和LinkedList:就当数组用,记住ArrayList的查询快、删除添加慢,LinkedList增删的效率比ArrayList高。

  HashSet和HashMap: 这两种集合装的对象必须重写hashCode和equals方法,因为他们的底层就是先通过hashCode来比较是不是相同事物,如果hashCode相同,再用equals比较是否相同。

  TreeSet和TreeMap:这两种集合装的对象必须实现了comparable接口或者在创建集合的时候指定了比较器,因为这些集合只通过比compareTo(实现comparable接口)或者compare(用比较器)的返回值来判断事物是否相等。

 

四、集合面试题

转自http://blog.csdn.net/bingzhen66/article/details/8081063

 

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

  • 大小: 186.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics