集合

来源:互联网 发布:查询linux是否装samba 编辑:程序博客网 时间:2024/05/02 09:37

集合是容器, 长度可变, 可以放入任意类型的对象.

1.Collection:该接口中定义了集合的共性方法,单列集合。
       *List: 有存储顺序, 可以重复
       ①Vector: 数组实现, 线程安全。该集合支持一种特有的取出方式:枚举(Enumeration)
                      枚举的功能和迭代器的功能是一致的。
       ②ArrayList: 数组实现, 线程不安全(比Vector效率高), 查找快, 增删慢
       ③LinkedList: 链表实现, 增删块, 查找慢。可以使用该集合去模拟出 队列(先进先出)                         或者 堆栈(后进先出) 数据结构。
       *Set: 没有存储顺序, 不可重复。该集合中没有特有的方法,直接继承自Collection。
              ①HashSet
  没有重复元素, 无序, 存储速度快
      去重复其实只用equals就可以, 每次存储元素的时候和集合中原来的元素逐个                equals比较, 如果相同就不存, 否则存入但此种做法效率很低, 如果集合中存储的元                素数量很多, 那么需要和所有的都比较.
       HashSet的原理是在存储元素的时候, 先计算元素的hashcode, 相当于给对象分                  类. 之后查找集合中有没有hashcode相同的元素.如果没有hashcode相同的元素, 直接                存入,如果有, 则和hashcode相同的元素进行equals比较, equals返回true则不存, 否                则存入.
      ②TreeSet
  没有重复元素, 有逻辑顺序
  TreeSet是以二叉树的形式存储数据的. 有两种方式指定元素排列顺序.
      自然顺序, 按照存储对象的类(必须实现了Comparable接口)中声明的compareTo                方法来排序. 如果返回值是负数放在左边, 正数右边, 如果是零代表重复, 不存.
      比较器, 在创建TreeSet的时候传入一个比较器Comparator的子类, 在里面定义                compare方法, 存入元素的时候就会根据比较器的顺序排序
      如果元素有自然顺序, 我们也传入了比较器, 那么比较器优先.
      比较器是给TreeSet使用的, 自然顺序是对类的所有对象使用的.
      比较器可以在每次创建TreeSet的时候定义不同的比较方法, 而类中的自然顺序定                义了之后不能在每次改变, 所以比较器优先.
      ③LinkHashSet
  HashSet的子类, 和HashSet原理相同, 但有存储顺序。
迭代器:Iterator。
所有Collection 集合共性的取出方式。
2.Map集合:一次存入一对元素,以键值对(Key,Value)形式存在,必须保证键的唯一性。
 键值对, 键唯一, 可以根据键获得值
 遍历Map集合有两种方式:
    ①根据keySet来遍历, 使用Map.keySet()方法获取一个Set, 这个set里面放的是Map集合中        的所有key遍历这个Set集合, 就可以获取到Map中的每一个key, 再根据每一个key获取对应的           value,就达到了遍历集合中所有元素的目的。
           ②根据entrySet来遍历, 使用Map.entrySet()方法获取一个Set, 这个Set里面放的是Map集          合中的所有Entry. Entry就是集合中的一个键值对遍历这个Set集合, 就可以获取到Map中的每        一个键值对, 再通过Entry的getKey()和getValue()方法就可以获取到每一个key和value。
 *.HashMap
  使用哈希算法去掉key的重复
  每当向集合中存储一个键值对的时候.
  会先拿key计算hashcode值, 判断集合中是否有hashcode相同的key
  如果没有相同的, 直接存入.
  如果有hashcode相同的key, 那么和相同的key进行equals比较, 返回true则覆盖原有                记录, 否则直接存入
  允许null键, null值
 *.HashTable
  和HashMap原理相同, 都是使用哈希算法保证键唯一.
  但线程安全, 效率较低
  不允许null键和null值
 *.TreeMap
  使用二叉树算法保证key唯一
  2种方式, 通过key的自然顺序, 或者传入比较器进行比较
  在TreeMap存储键值对的时候, 会先用key和集合中的其他key比较(自然顺序或比较器                顺序), 完成对key的排序和去重复工作, 然后再存入
 *.LinkedHashMap
  是HashMap的子类, 原理和HashMap相同
  但有存储顺序
 *.Properties
  Hashtable的子类, 实现原理和Hashtable相同, 都是哈希算法
  但这个类通常用来处理配置文件, 值存储字符串。
集合总结:
 1.集合各个类的特点
 Collection 单列集合
     List 有存储顺序, 可重复
       ArrayList 数组, 查找块, 增删慢
       Vector 线程安全的 ArrayList
       LinkedList 链表, 查找慢, 增删块
     Set 没有存储顺序, 不可重复
       HashSet 通过哈希算法保证唯一, hashCode()和equals()
       TreeSet通过二叉树算法保证唯一, 自然顺序(类实现Comparable), 比较器(Comparator)
       LinkedHashSet 是HashSet的子类, 有存储顺序
  Map 键值对
     HashMap 通过哈希算法保证key唯一, hashCode()和equals(), 允许null键值
     Hashtable 线程安全的HashMap, 不允许null键值
     TreeMap 通过二叉树算法保证key唯一, 自然顺序(类实现Comparable), 比较(Comparator)
     LinkedHashMap 是HashMap的子类, 有存储顺序
     Properties 是HashTable的子类, 用来操作配置文件, 存储String
 2.集合的Api使用
   List的存取, 以及List接口中的各个常用方法
   List的各种遍历方式
       for循环, 通过脚标
       Iterator
       forEach
       Enumeration(只用于Vector)
   Set的hashcode和equals, 怎么实现Comparable接口, 怎么传入比较器Comparator
   Set的遍历
       Iterator
       forEach
   Map的遍历方式
       通过keySet
       通过entrySet