集合

来源:互联网 发布:java的反射机制详解 编辑:程序博客网 时间:2024/05/22 11:43
  1. 集合的由来:对象用于封装特有的数据,对象多了需要存储,如果对象的个数不确定,及使用集合容器来存储。
  2. 集合的特点:用于存储对象的容器,集合的长度是可变的,集合中不可以存储基本数据类型
  3. Collection的常见方法:
    1 .add(Object ob)添加。
    2.addAll(Collection coll)添加所有。
    3 .remove(Object ob)删除。
    4 .removeAll(Collection<> coll )清除多个。
    5 .clear()清空所有
    6 .contains(Object obj)判断是否包含
    7.containsAll(Collection<> coll)判断是否包含一堆
    8.isEmpty()判断是否为空
    9.size()获取集合的长度
    10.iterator()迭代器,取出元素的方法,返回值为Iterator
    11.returnAll(Collection<> coll)返回两个集合的交集
    12.toArarry()讲集合变换成数组
  4. 集合的遍历方法,第一种迭代器的一种方式:
Iterator it = coll.iterator()while(it.hasNext()){    it.next();}

迭代器遍历的另外一种方式:

for(Iterator it = coll.iterator();it.hasNext();){     it.next();}
  1. 通过对源码的分析得出,迭代器其实就是实现了Iterator接口的每一个容器的内部对象。该对象必须依赖于具体容器,因为每个容器的数据结构都不同,所以该迭代器对象是在容器中进行内部实现。
  2. List特点:有序,存入和取出的顺序是一致的,元素都有索引(角标),元素可以重复。Set的特点:元素不能重复,无序。
  3. 在迭代的过程中不要使用集合操作元素容易出现异常 (ConcurrentModificationException)如:
 Iterator it = coll.iterator()    while(it.hasNext()){         coll.add("d");//}
  1. 解决上述问题可以使用Iterator的子接口ListIterator来完成:
  ListIterator it=coll.listIterator()    while(it.hasNext()){      it.add("d");}
  1. List:
    Vector:内部是数组数据结构,是同步的
    ArrayList:内部是数据数据结构,不同步的。替代了Vector查询速度快
    LinkedList:内部是链表数据结构,是不同步。增删快。

  2. 关于Vector的的使用:

 Vector  v = new Vector();   v.addElement("abc1");   v.addElement("abc2");   Enumeration en = v.elements();   while(en.hasMoreElements()){       en.nextElement();//可以使用迭代器进行替换操作    }
  1. 关于LinkedList:
   LinkedList link = new LinkedList();   link.addFirst("abc1");
  1. ArrayList:
    集合里添加对象其实是存的该对象的引用,在1.5版本以后可以直接al.add(5),自动装箱

13.Set接口中分方法和Collection一致

|— HashSet 内部数据结构是哈希表,取出方式只有迭代器,无序不重复,不同步,在存储元素的时候,使用的元素的hashCode方法来确定位置,如果位置相同,在通过元素的equals来确定是否相同,它的之类LinkedHashSet,可以保证唯一的情况下有序
| TreeSet 可以对set集合中的元素进行指定顺序的排序,不同步

哈希表确定元素是否相同

1,判断的是两个元素的哈希值是否相同,如果相同,在判断两个对象的内容是否相同。
2,判断哈希值相同,其实判断的是对象的hashCode方法。判断内容相同,用的是equals方法
3如果哈希值相同,内容不同,那么对象在哈希表的位置可以顺延或者挂在该位置上(该几率比较小)
注意:如果哈希值不同,是不需要判断equals的

原创粉丝点击