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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 648947721 中级黑马   /  2014-9-5 01:39  /  1417 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

一.集合的分类
Collection     一次存一个对象, 单列集合
  List     可重复, 有索引,有序
   ArrayList  数组实现, 查找快, 线程不安全
   LinkedList  链表实现, 增删快, 线程不安全
   Vector   数组实现, 线程安全
  Set      不可重复, 没索引,无序
   HashSet   使用哈希算法去重复, 效率高, 但元素无序
   TreeSet   TreeSet是用排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列
   LinkedHashSet  HashSet的子类, 原理相同, 除了去重复之外还能保留存储顺序
二.HashSet(LinkedHashSet)
1.HashSet原理
  我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低
  哈希算法提高了去重复的效率, 降低了使用equals()方法的次数
  当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象
   如果没有哈希值相同的对象就直接存入集合
   如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较
    比较结果为false就存入, true则不存
2.将自定义类的对象存入HashSet去重复
  类中必须重写hashCode()和equals()方法
***** hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
***** equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储
三.迭代(遍历)
1.List
  a.普通for循环, 使用get()逐个获取
  b.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
  c.增强for循环, 只要可以使用Iterator的类都可以用
  d.Vector集合可以使用Enumeration的hasMoreElements()和nextElement()方法
2.Set
  a.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
  b.增强for循环, 只要可以使用Iterator的类都可以用
四.TreeSet
1.特点
  TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列
2.使用方式
  a.自然顺序(Comparable)
   TreeSet类的add()方法中会把存入的对象提升为Comparable类型
   调用对象的compareTo()方法和集合中的对象比较
   根据compareTo()方法返回的结果进行存储
  b.比较器顺序(Comparator)
   创建TreeSet的时候可以制定 一个Comparator
   如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
   add()方法内部会自动调用Comparator接口中compare()方法排序
  c.两种方式的区别
   TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
   TreeSet如果传入Comparator, 就优先按照Comparator

5 个回复

倒序浏览
你总结这么多,可以写好几篇技术博客了。。。。
回复 使用道具 举报
这么多,也就一篇吧..
回复 使用道具 举报
博客是写给自己的 学习也是自己的 写几篇觉得合适就写几篇
回复 使用道具 举报
写博客正好                                                               
回复 使用道具 举报
夜半风 发表于 2014-9-5 09:43
博客是写给自己的 学习也是自己的 写几篇觉得合适就写几篇

是啊,发自于自己思维深处的最好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马