0816总结
对象数组:类名[] 对象名=new 类名[长度];
数组的缺点:只要创建出来就固定其长度了,所有扩展性差(使用集合来解决)
数组与集合的关系:
相同点:
1、数组与集合都是用来存数据,都可以通过索引来获取数据
2、数组与集合都是采用数组的方法来进行存的
不同点:
1、数组可以存基本数据类型,也可以存引用数据类型;但是集合只能够存引用数据类型
2、数组的长度是固定的,集合的长度是可变的
集合的框架
单列:每一个存的数据的都是独立的
Collection跟接口
// \\
List Set
(有序,有索引,可以重复) (无序,不可以使用普通的for循环)
//
ArrayList(重点)
(插入慢,查询快)
LinedList
(查询慢,插入快)
Vector
线程安全
双列:以键值对存 key values(未讲)
集合
集合也是一个容器,用于存数据
Collection
Collection 层次结构中的根接口索引也是从0开始
常规的方法
添加元素:add(E e)【返回值是bealoon,添加成功返回true】
判断是否有此元素:contains(Object o)【存在返回true,否则false】
判断集合里是否含有元素:isEmpty() 【有元素返回false,没有元素返回true】
根据索引素进行删除:remove(Object o)
获取到集合的长度:size()
把集合转换成数组:Object[] toArray()
清空数组里的所有的元素:clear()
把集合转换成迭代器的方法:iterator()
Collection的遍历:
Object[]obj=col.toArray();
for (int i=0;i<obj.length;i++){
ystem.out.println(obj[i].toString());
}
所有带All的方法
1、把小集合添加到大集合里:
//把集合c的所有数据添加到co
co.addAll(c);
2、
//如果此 collection 包含指定 collection 中的所有元素,则返回 true
containsAll(Collection<?> c)
3、
//如果存在交集返回值是true ,返回的是没有交集的数据
removeAll(Collection<?> c);
4、
//判断是否发生改变,如果发生改变返回true,不发生改变返回false
col1.retainAll(col)
对集合进行遍历的三种方法
1、for循环
for (int i=0;i<col.size();i++){
System.out.println(((ArrayList) col).get(i));
}
2、增强for循环
for (Object obj:col){
Student s=(Student)obj;
System.out.println(s);
}
3、迭代器
Iterator ite=col.iterator(); //将 cal 转化为迭代器类型
while (ite.hasNext()){
Student s=(Student) ite.next(); //向下转型,将父类还原成Student类
System.out.println(s);
}
Iterator
是一个接口,不能够被实例化
常规的方法
判断是否有下一个元素:hasNext()【有则返回true】
获取到下一个元素:next();
移除迭代器的某一个元素:remove();
遍历:使用迭代器
while 循环 (迭代器.hasNext()){
next() // 获取其元素
}
1、把一个集合转换成迭代器
2、获取值的时候,不要通过next()方法来获取具体的值,一定要先获取对象,通过对象来获取值
List
导包:java.util;是一个接口
特点:1.有顺序 2.有索引 3.可以重复
常规的方法:
根据索引的位置来进行添加:add(int index, E element)
根据索引来获取其值:get(int index)
根据索引来进行删除:remove(int index)
替换:set(int index, E element)【前提这个已经存在】
总结:这个方法都是根据索引来进行操作的
迭代器遍历报错:对象的并发修改(java.util.ConcurrentModificationException)
ListIterator 这个迭代器是针对 list 集合而存在,它的父类也是Iterator
ArrayList
1.有顺序 2.有索引 3.可以重复 4.线程不安全
5.以数组的方式来存数据;特点 :查询快;增加删除修改慢 (最常用的)
构造方法:跟StringBuffer 的有点类似
常规的方法
添加:add()【默认也是向末尾添加数据】
获取:get(index) 【根据索引来获取】
LinkedList
是以链表式来进行存;特点:增加、删除、修改速度快,效率高;查询速度慢
也是list的实现类(不常用)
有两个构造,一般使用空的构造
常规的方法
插入数据到集合的头部:addFirst(E e)
插入数据到集合的尾部:addLast(E e) 【比平常插入效率高】
获取第一个元素:getFirst()
获取最后一个元素:getLast()
移除第一个元素:removeFirst()
移除最后一个元素:removeLast()
Vector
已经被ArrayList替换,也是以数组的方式来进行存,构造方法与 ArrayList 是一样的
独有的方法
向末尾来添加数据:addElement(E obj)
根据索引来获取:elementAt(int index)
删除集合里的对象:removeElement(Object obj)
Element:都是根据节点来进行操作