黑马程序员技术交流社区
标题:
集合笔记
[打印本页]
作者:
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