<--
注意:
1.List集合(ArrayList,LinkedList,Vector)是根据 equals()方法进行元素的相等判断的,
由于List集合是可以重复的,那么在使用remove,contains等方法时,就是根据equals来的.
2.只有实现了Iterable接口的类,才可以进行for-each循环遍历;数组是可以遍历的.
3.集合迭代器遍历时,不能使用集合的方法进行元素删除动作,而应该使用迭代器的方法.
4.System.arraycopy(src,start,des,start,len): 也可以在自身上进行元素的复制动作!!
5.当出现多个形参时,可变参数必须只能放在最后;另外,还支持(),数组的传递!!
6.List还有一个特殊的方法: listIterator(),可以直接实现增,删,改,查!!
--> 一.集合
1.什么是集合
集合是一种容器, 和数组类似,
优点:长度可变
2.什么是List
List是集合中的一种, 元素可重复, 有存储顺序.
List接口下的所有子类都是可重复且有序的, 我们主要使用三种: ArrayList, LinkedList, Vector
* 3.List常用方法
增:
add(E e)
add(int index, E e)
addAll(Collection<? extends E> c)
删:
remove(int index)
remove(Object obj)
改:
set(int index, E e)
查:
get(int index)
subList(int from, int to)
添加对象到最后: boolean add(E e)
添加对象到指定位置: void add(int index, E e)
通过索引删除: E remove(int index)
通过对象删除: boolean remove(Object obj)
设置指定位置上的元素: E set(int index, E e)
获取指定位置上的元素: E get(int index)
将一个集合中的所有元素添加到另一个集合: boolean addAll(Collection<? extends E>)
获取集合的大小: int size()
清空集合: void clear()
*** 4.List的迭代
a.通用的
注:
for(int i=0;i<list.size();i++)
list.get(i);
b.通用的
注:
Iterator<Person> it = list.iterator();
while(it.hasNext()) {
it.next();
}
可以改进为for循环:
for(Iterator<Person> it = list.iterator(); it.hasNext(); )
it.next();
c.通用的
注:
for(Person p : list) {
p;
}
d.Vector特有的
注:
Enumeration en = vector.elements();
while(en.hasMoreElements()) {
en.nextElement();
}
可以改进为for循环:
for(Enumeration<Person> en = vector.elements(); vector.hasMoreElements(); )
vector.nextElement();
5.List接口的几个实现类
a.ArrayList: 数组实现, 查找快, 增删慢
b.LinkedList: 链表实现, 增删快, 查找慢
c.Vector: 和ArrayList原理相同, 但线程安全, 效率低.
二.和集合相关的JDK5新特性
* 1.增强for循环
for (类型 变量名 : 容器) { 循环体 }
容器长度是几就会循环几次, 每次循环时, 会将容器中的一个元素赋值给指定变量
只要实现了Iterable接口的类都可以使用增强for循环
* 2.泛型
在使用集合类的时候可以在类名后面加上"<类型>", 这样做表示该集合中只能存储指定类型的数据
集合一旦定义泛型, 其中所有方法的类型都变成了指定类型, 不论添加还是获取都会改为指定的类型
添加泛型之后可以将以前运行时才会出现的异常转为了编译期的错误, 方便查错.
还可以省去类型强转的麻烦, 优化了代码的结构.
* 3.可变参数
在函数的参数列表中, 可以使用"类型... 参数名"形式定义一个可变参数
可变参数可以接收同一类型的0个到多个数据, 或者也可以接收一个数组, 然后自动将接收到的数据装入一个数组中, 在函数中对数组进行访问就可以得到实参对象
可变参数只能是参数列表的最后一个参数.
|