1.集合的作用:
1.1为什么出现集合类?
Ø面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
1.2数组和集合类同是容器,有何不同?
Ø数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
1.3集合类的特点
Ø集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
2.集合关系图
3.
Collection接口有两个子接口:
List(列表) ,Set(集)
List:可存放重复元素,元素存取是有序的。
List接口中的常用类:
ØVector:线程安全,但速度慢,已被 ArrayList替代。
ØArrayList:线程不安全,查询速度快。
ØLinkedList:链表结构,增删速度快。
取出List集合中元素的方式:
Øget(int index):通过脚标获取元素。
Øiterator():通过迭代方法获取迭代器对象。
关于迭代:
是取出集合中元素的一种方式。
Ø因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
Ø用法:1.
for(Iteratoriter = list.iterator();iter.hasNext(); )
{
System.out.println(iter.next());
}
2.
Iteratoriter = l.iterator();
while(iter.hasNext())
{
System.out.println(iter.next());
}
3.迭代注意事项:
Ø迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。
Ø迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。
迭代器的next方法返回值类型是Object,所以要记得类型转换
Set:不可以存放重复元素,元素存取是无序的。
先判断hashcode是否相同,如果不同,可
以存放,如果相同,再判断equals方法是否
相同。因此即使equals相同,但是如果
hashcode不同,也能添加。跟是否同一对象
无关。
set中的常用类:
HashSet:线程不安全,存取速度快。HashSet:通过equals(比较元素的值)方法以及是否是同一对象和hashCode (比较元素在内存中的地址) 方法来保证元素的唯一性。
TreeSet: 线程不安全,可以对Set集合中的 元素进行排序。
通过compareTo或者compare 方法中的来保证元素的唯一 性。元素是以二叉树的形式存 放的。
TreeSet的使用:(往TreeSet中添加元素时候,必须先比较要添加的元素和集合中已有的元素是否相同)
1.使用比较方法判断对象是否重复。
2.比较方法实现有两种
a)自定义Comparator比较器,和TreeSet关联。
b)让javaBean实现Comparable接口,实现CompareTo()方法。
3.TreeSet可以容纳null元素。
4.TreeSet可以使用降序排列。
通过descendingIterator()方法得到降序迭代器实现。
5.TreeSet默认升序排列。
4.泛型:
Ø提高了程序的安全性
Ø将运行期遇到的问题转移到了编译期
Ø省去了类型强转的麻烦
Ø泛型类的出现优化了程序设计
5.Map
ØMap与Collection在集合框架中属并列存在
ØMap存储的是键值对
ØMap存储元素使用put方法,Collection使用add方法
ØMap集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素
ØMap集合中键要保证唯一性
Map集合常用类:
ØHashtable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
ØHashMap:线程不安全,速度快,允许存放null键,null值。
ØTreeMap:对键进行排序,排序原理与TreeSet相同。