黑马程序员技术交流社区

标题: 集合笔记 [打印本页]

作者: 811487754    时间: 2016-8-2 15:20
标题: 集合笔记
集合:合数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少 * B:数组和集合的区别
区别1 :
  * 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
  * 集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象   
区别2:
  * 数组长度是固定的,不能自动增长
  * 集合的长度的是可变的,可以根据元素的增加而增长
如果元素个数是固定的推荐用数组;不固定的推荐用集合。

                                          All后缀的是两个集合的关系
   boolean add(E e)  //添加传入c2就是将c2当做一个元素添加 boolean addAll(Collection c)   //将c2的每一个元素添加到c1
   boolean remove(Object o)  //删除                boolean removeAll(Collection c)  //将c1中与c2的交集删除
   void clear()  //清空
   boolean contains(Object o)  //是否包含            boolean removeAll(Collection c)  //看c1是否包含整个c2(c2中可以有重复)
   boolean isEmpty()  //是否为空                  boolean retainAll(Collection c)  //提取c1与c2中的交集,赋值给c1。 如果c1改变就返回ture,不变返回false
   int size()   //获取元素个数
   object[] toArray()  //集合转换成数组 返回的是object数组 如果里面有类似Student的自定义类想要拿到get方法,需要向下转型
   int size()   //获取元素个数     

集合的使用方法:
Collection c = new ArrayList();  //如上图,因为list可以重复存放,全部返回ture
c.add("abc");  //添加
boolean b2 = c.add(true);  //基本数据类型会自动装箱
boolean b3 = c.add(new Student("张三",23));
System.out.println(c);  //父类的父类重写了toString 会显示存进去的所有内容
c.remove("abc"); //删除这个元素 整数不会自动装箱 被当做索引
c.clear()  //清空
c.contians("abc") //是否包含
c.isEmpty()  //是否为空
c.size()  //获取元素个数
迭代器:集合的迭代(遍历) Iterator
Iterator it = c.iterator();
it.hasNext();  //判断集合是否有元素,有返回ture
it.next();    //获取下一个元素
while(it.hasNext()) {    //迭代集合
    System.out.pritln(it.next());
}
while(it.hasNext()) {    //迭代集合元素中的get方法
    Student s = (Student)it.next();
    System.out.pritln(it.next());
}
迭代过程中可以使用添加功能:ListIterator
   ListIterator lit = c.ListIterator();
   hasNext();  //是否有下一个
   hasPrevious(); //是否有上一个
   next();    //返回下一个
   previous();  //返回上一个
List集合的特有功能:
    * void add(int index,E element) //指定位置添加
    * E remove(int index) //指定位置删除 返回object删除的元素 原集合中被删除
    * E get(int index)       //
    * E set(int index,E element)  //
List的三个子类的特点:
ArrayList:
   底层数据结构是数组,查询快(通过索引查找),增删慢(添加需要将整体向后移,然后插入)。
   程不安全,效率高。
Vector:被ArrayList 替代
   底层数据结构是数组,查询快,增删慢。
   线程安全,效率低。
   Vector相对ArrayList查询慢(线程安全的)
   Vector相对LinkedList增删慢(数组结构)
LinkedList: (链表:每一个元素的开口存储上一个元素的地址值,末尾存储下一个元素的地址值)
    底层数据结构是链表,查询慢(从头或尾(进的一端)开始一个一个查找过去),增删快(直接链接到中间)。
    线程不安全,效率高。
    Vector和ArrayList的区别
    Vector是线程安全的,效率低
    ArrayList是线程不安全的,效率高
    共同点:都是数组实现的
    ArrayList和LinkedList的区别
    ArrayList底层是数组结果,查询和修改快
    LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
    共同点:都是线程不安全的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2