A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

个人对集合的总结,有钱捧钱场,没钱鼓励鼓励!
集合的使用步骤
1.创建集合对象
2.创建元素对象(如果是String可以省略该步骤)
3.将元素对象添加进集合对象
4.遍历使用

================  Collection 接口身上的方法 ================================
================  Collection 接口身上的方法 ================================
================  Collection 接口身上的方法 ================================
================  Collection 接口身上的方法 ================================

按照这个顺序,把所有的方法都调用,知道自己完全理解!
1、创建集合
Collection c = new ArrayList();
2、往 c 集合里面添加东西
c.add(Object obj);
3、往 c 集合里面,添加一堆东西
c.addAll(Collection c1);

4、删除
c.clear();//清空了 c 这个集合里面的东西
c.remove(Object obj);  //删除了 c 集合里面的obj对象
c.removeAll(Collection c1); //删除一堆东西,这堆东西同时存在 c 和 c1 中的,都删除
5、判断
c.isEmpty();  //判断 c 这个集合里面的大小,是不是等于0
c.contains(Object obj);  //判断 c 这个集合里面,有没有包含 obj 这个对象
c.containsAll(Collection c1); //判断 c 这个集合里面,有没有包含 c1 集合中的全部元素,有
就返回true,否则返回false
=====================  List 接口身上的方法  =====================================================
知道List接口的ListIterator可以解决并发修改异常。
1:常见的数据结构(理解)
(1)加钱:数据结构+算法+UML+设计模式
(2)栈,队列,数组,链表
  栈:先进后出,弹夹
  队列:先进先出,排队
  数组:查询快,增删慢
  链表:查询慢,增删快
(3)面试前:百度下常见的数据结构的优缺点。
2:List的三个儿子(理解)
(1)List的三个儿子特点:(面试题)
  List
   |--ArrayList
    底层数据结构是数组,查询快,增删慢
    线程不安全,效率高
   |--Vector
    底层数据结构是数组,查询快,增删慢
    线程安全,效率低
   |--LinkedList
    底层数据结构是链表,查询慢,增删快
    线程不安全,效率高
(2)到底使用谁?根据需求看
  是否要安全:
   是:Vector
   否:ArrayList,LinkedList
    查询多:ArrayList
    增删多:LinkedList
  如果你什么都不知道,用ArrayList。
(3)ArrayList(存储字符串和自定义对象)
  重写equqls三个步骤
   1. 判断是否为同一个对象
   2. 判断是否为该类的对象
   3. 向下转型,然后根据需求比较成员变量
(4)Vector(存储字符串和自定义对象)
  有自己的特殊功能。
  但是不用,被新功能给替代了。
(5)LinkedList(存储字符串和自定义对象)
  有自己的特殊功能。可以很方便的操作头和尾。
   一般在集合中用。
4:增强for循环(掌握)
(1)格式:foreach
  for(数组或者Collection集合的元素类型 变量 : 数组或者Collection集合的对象)
  {
   直接使用变量即可。
  }
(2)好处:
  方便了数组和Collection集合的遍历。
(3)注意(注意):
  A:增强for是用来替代迭代器的。
  B:不要在用增强for遍历集合的时候,用集合对集合本身进行修改。
(4)遍历集合三种方式
  迭代器
  普通for+get
  增强for(工作时候用)
=====================  Set接口身上的方法  =====================================================
1:Set(掌握)
(1)Set的特点:
  元素无序,唯一。
注意:这里的顺序是指存储和取出顺序。
2:HashSet(掌握)
(1)HashSet:不保证元素的迭代顺序。并且,不保证该顺序恒久不变。
(2)怎么保证的呢?
  HashSet底层数据结构是哈希表。
  它依赖两个方法:hashCode()和equals()
  顺序:
   首先,判断hashCode()值是否相同。
    相同:
     继续走equals()方法,根据其返回值:
      true:说明元素重复,不添加到集合。
      false:说明元素不重复,添加到集合。
    不同:直接添加到集合。
(3)怎么重写hashCode()和equals()方法呢?(忘了吧)
  hashCode():
   把对象的所有成员变量值相加即可。
   如果是基本类型,就加值。如果是引用类型,就加哈希值。
  equals():
   A:this==obj
   B:!(obj instanceof Student)
   C:所有成员变量的值比较。基本类型用==,引用类型用equals()。
  如果不会,自动生成。
(4)案例:(掌握)
  HashSet存储字符串并遍历
  HashSet存储自定义对象并遍历
   针对自定义对象:
    需求:如果对象的成员都相同,我们就认为是同一个元素。
3:TreeSet(理解)
(1)TreeSet:根据构造方法的不用,选择使用自然排序或者比较器排序。
             按照实际的需求,可以对元素进行排序。并且保证唯一。
(2)怎么保证的呢?
  排序:底层结构是二叉树。按照树节点进行存储和取出。
   两种实现:
    A:自然排序(元素具备比较性)
     TreeSet的无参构造,要求对象所属的类实现Comparable接口。  

    B:比较器排序(集合具备比较性)
     TreeSet的带参构造,要求构造方法接收一个实现了Comparator接
口的对象。
  唯一:根据返回值是否为0。
  
  注意:
   如果同时有两种方案,以谁为主呢?以比较器为主。
(3)案例:(理解)
  TreeSet存储字符串并遍历
  TreeSet存储Integer并遍历
  TreeSet存储自定义对象并遍历
4:Collection体现的集合总结
Collection
  |--List
   |--ArrayList
    底层数据结构是数组,查询快,增删慢
    线程不安全,效率高。
   |--LinkedList
    底层数据结构是链表,查询慢,增删快
    线程不安全,效率高。
   |--Vector
    底层数据结构是数组,查询快,增删慢
    线程安全,效率低。
  |--Set 唯一
   |--HashSet
    底层数据结构是哈希表。
    如何保证元素唯一性呢?
    依赖两个方法。hashCode()和equals()。
    以后都自动生成。
   |--TreeSet
    底层数据结构是二叉树。
    如何保证元素唯一性呢?如何保证元素排序呢?
    根据返回值是否是0,判断元素是否重复。
    排序有两种方案:
     元素具备比较性 实现Comparable接口
     集合具备比较性 实现Comparator接口
5:在集合中的数据结构问题
ArrayXxx:底层数据结构是数组。查询快,增删慢。
LinkedXxx:底层数据结构是链表。查询慢,增删快。
HashXxx:底层数据结构是哈希表。跟两个有关。hashCode()和equals()
TreeXxx:底层数据结构是二叉树。两种排序方式。Comparable接口和Comparator接口
6:什么时候,使用哪种Collection集合。
元素唯一吗?
  唯一:
   Set
    需要排序吗?
     需要:TreeSet
     不需要:HashSet
   不知道,用HashSet。
  不唯一:
   List
    需要安全码?
     需要:Vector
     不需要:ArrayList和LinkedList
      查询多:ArrayList
      增删多;LinkedList
   不知道,用ArrayList。
====================================  总结  =====================================================
用ArrayList去重复,用ArrayList,重写equlas方法,里面用contains比较方法
模拟栈结构,重写Stack方法用LinkedList
用HashSetq去重复,重写equals ,hashcode()方法,保证了元素的唯一性
TreeSet保证元素排序,唯一,用自然排序,comparable,在对象类中实现,
实现comparable接口,重写comparTo方法
比较器comparator实现,需要实现comparator方法,重写comparTo方法,
并且新建实现类,实现实现comparator方法。
创建集合对象
comparator c=new Mycomparator();
TreeSet ts=new TreeSet(c); 当接口或者类当形参传递时,可以用匿名内部类实现。如下
TreeSet ts=new TreeSet(new comparator)
数组排序用Arrays.sort,集合排序用collections.sort

3 个回复

正序浏览
很详细的课堂笔记、
回复 使用道具 举报
学习了.+1
回复 使用道具 举报
过来看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马