集合
注意:Collection是接口,Collections是类。
集合和数组的比较
长度:数组固定不可变,创建时需指定长度;集合可动态修改,创建时不需要指定长度
内容::数组可以存放基本数据类型和引用类型的元素; 集合只能存放引用类型的元素。
元素:数组只能存放同一类型的元素;集合可以存放不同类型的元素。
Collection(集合)接口下的两个子类——set和list
set:无序不重复
list:有序可重复
注:顺序值存入顺序和集合内存储顺序的异同。
Collection(集合)的常用方法
Set接口的实现类
使用foreach遍历
HashSet:散列存取
TreeSet:存入顺序跟存储顺序不同,但存储是按照排序存储。
set常用方法
Collection的常用方法,见上面。
List接口的实现类
ArrayList:是线性顺序存储的,是一种线性表,可以理解为可变长度的数组。
LinkedList:是链式存储的,但不仅仅具有链表的特性,既有队列又有栈的特点,可以在头尾添加、删除、取得。
list常用方法
ArrayList和LinkedList
- ArrayList是线性顺序存储,Linkedlist是链表
- ArrayList适合随机查询,LinkedList适合插入和删除元素(效率高)
- 总体来说,功能上,LinkedList要多一点
Iterator接口(迭代器)
· Iterator对象称作迭代器,用来方便的实现对容器内的元素进行遍历操作
· Iterator是为遍历而设计,能够从集合中取出元素和删除元素,但是没有添加元素的功能
· terator的功能上比较简单,使用中,只能单向移动collections类常用方法
Map接口
Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象
Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的。Map常用方法
Map接口的实现类
HashMap:key/value对是按照Hash算法存储的
TreeMap:key/value对是排序(按key排序)存储的,基于树HashMap
构造方法:
HashMap 变量名=new HasgMap();
HashMap 变量名=new HashMap(int capacity);//加载因子
HashMap 变量名=new HashMap(int capacity,float lodeFactor)//初始容量和加载因子
HashMap 变量名=new HashMap(Map m);
HashMap和TreeMap的比较
1.HashMap基于哈希表实现;TreeMap基于树实现。
2.HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用;TreeMap没有调优选项,因为该树总处于平衡状态。
3.HashMap性能优于TreeMap。
HashMap和Hashtable的比较
1.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
2.Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。
3.HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
集合类的选择
· Set内存放的元素不允许重复,List存放的元素有一定的顺序。
· Map的应用主要在利用键/值对进行快速查询。
· ArrayList和LinkedList的区别在于随机查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好。
· HashSet和TreeSet的区别在于集合内元素是否排序。
集合的遍历
1.for循环
for(int i=0;i<alist,size();i++) {
System.out.println(i);
}
2.foreach循环
for(Object i:alist) {
System.out.println(i);
System.out.println(" ");
}
3.迭代器遍历
Iterator it=alist.iterator();
while(it.hasNext()) {
System.out.println(i);
System.out.println(" ");
}
泛型
概念:泛型经常被称为参数化类型,它能够像方法一样接受不同类型的参数。
ArrayList<E> 变量名;//E是变量类型
例如:
ArrayList<String> arr;
arr=new ArrayList<String>();
HashMap<Inreger,String> hm=new HashMap<Integer,String>();