0.
在讲集合类之前先提一下泛型类,泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
下面的Cone类就是一个泛型类。
class Cone<E>{
double height;
E bottom;
public Cone(E bottom) {
this.bottom = bottom;
}
}
在main方法中的使用:
Cone<Integer> cone = new Cone<Integer>(5);
Java中的泛型类和C++中的模板看起来相似,实际上有很大不同。泛型类中的泛型变量只能调用Object类中的方法。另外,泛型类创建实例时<>中必须是引用数据类型而不能是基本数据类型。Java集合框架中很多泛型类。
1.
Java集合:保存多个其他对象的对象,不能保存基本数据类型。
Collection框架结构大致如下:
List集合的实现:
①LinkedList采用双向循环链表实现
②ArrayList采用变长数组算法实现
③Vector采用变长数组算法实现
1.1 ArrayList和Vector的区别:
区别一:Vector是线程同步的,ArrayList不是
区别二:ArrayList和Vector都有一个初始的容量大小,当存入他们里面的元素的个数超过容量时,就需要增加ArrayList和Vector的存储空间。Vector增长原来的一倍,ArrayList增加原来的0.5倍。Vector可以设置增长空间的大小,而ArrayList没有提供设置增长空间的方法。
1.2集合(Collection)上的基本操作(增、删、改、查) //请参考API
1.3 集合与集合的基本操作(交、并、补、差)//请参考API
1.4 集合的遍历
通过迭代器iterator来遍历整个集合是最高效的。主要用到了iterator的两个方法:
①hasNext() 检查游标是否有下一个元素
②next() 游标移动到下一个元素,并返回这个元素的引用
用while循环配合这两个方法,可以迭代处理集合的所有元素
Eg:
package ex;
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int i=0;i<10;i++) {
arr.add(i);
}
Iterator<Integer> iterator = arr.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
}
}
//运行结果:
//0 1 2 3 4 5 6 7 8 9
注:迭代时可以使用迭代器remove()方法删除刚刚迭代的元素,但不能用集合方法add,remove,set等更改集合元素
Map:
HashMap和Hashtable的主要区别:
①线程安全。在需要完全的线程安全时使用Hashtable
②速度。HashMap的速度优于Hashtable
2.数组和集合的转换
数组转集合:
package ex;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
Integer []a =new Integer[] {1,2,3,4,5};
List<Integer> arr = Arrays.asList(a);
}
}
集合转数组:
package ex;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int i=0;i<10;i++) {
arr.add(i);
}
Integer[] a = arr.toArray(new Integer[] {});
}
}