集合

集合

注意:Collection是接口,Collections是类。

集合和数组的比较

长度:数组固定不可变,创建时需指定长度;集合可动态修改,创建时不需要指定长度
内容::数组可以存放基本数据类型和引用类型的元素; 集合只能存放引用类型的元素。
元素:数组只能存放同一类型的元素;集合可以存放不同类型的元素。

Collection(集合)接口下的两个子类——set和list

set:无序不重复
list:有序可重复
注:顺序值存入顺序和集合内存储顺序的异同。

Collection(集合)的常用方法


Set接口的实现类

使用foreach遍历
HashSet:散列存取
TreeSet:存入顺序跟存储顺序不同,但存储是按照排序存储。

set常用方法

Collection的常用方法,见上面。

List接口的实现类

ArrayList:是线性顺序存储的,是一种线性表,可以理解为可变长度的数组。
LinkedList:是链式存储的,但不仅仅具有链表的特性,既有队列又有栈的特点,可以在头尾添加、删除、取得。

list常用方法

ArrayList和LinkedList

  1. ArrayList是线性顺序存储,Linkedlist是链表
  2. ArrayList适合随机查询,LinkedList适合插入和删除元素(效率高)
  3. 总体来说,功能上,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>();