常用的集合有:
List集合;
Set集合;
Map集合;
其中List与Set实现了Collection接口。各接口还提供了不同的实现类。
以下是集合继承图:
为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
集合类的特点 :
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
集合关系的分析:
集合框架中的常用接口
Collection接口有两个子接口:
List(列表) ,Set(集)List:可存放重复元素,元素存取是有序的。
Set:不可以存放重复元素,元素存取是无序的。
List接口中常用类:
Vector:线程安全,但速度慢,已被ArrayList替代。
ArrayList:线程不安全,查询速度快。
LinkedList:链表结构,增删速度快。
取出LIst集合中元素的方式:
get(int index):通过脚标获取元素。
iterator():通过迭代方法获取迭代器对象。
迭代是取出集合中元素的一种方式。因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
iterator用法:(用之前写的例子)
//实例数组,添加数据
ArrayList<String> alist = new ArrayList<String>();
alist.add("a");
alist.add("b");
alist.add("c");
alist.add("d");
alist.add("f");
//因为迭代器的使用需要返回一个iterator,所以要声明一个iterator。
Iterator<String> iterator = alist.iterator();
//判断条件,判断是否还有数据,如有,则执行循环体。
while(iterator.hasNext()){
//将下一个数据赋值给result,输出
String result = iterator.next();
System.out.println(result);
迭代注意事项:
迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。
迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。
迭代器的next方法返回值类型是Object,所以要记得类型转换。
Set接口中常用的类:
HashSet:线程不安全,存取速度快。
TreeSet: 线程不安全,可以对Set集合中的 元素进行排序。
Set集合元素唯一性原因
HashSet:通过equals方法和hashCode 方法来保证元素的唯一性。
TreeSet:通过compareTo或者compare 方法中的来保证元素的唯一性。元素是以二叉树的形式存放的。
Map集合
Map与Collection不同:
- Map与Collection在集合框架中属并列存在
- Map存储的是键值对
- Map存储元素使用put方法,Collection使用add方法
- Map集合没有直接取出元素的方法,而是 先转成Set集合,在通过迭代获取元素
- Map集合中键要保证唯一性
Map集合存储于取出元素的方式
put( key k , value v)向集合中添加置顶的key与value的映射关系
get( Object key) 如果存在指定的键对象,则返回该对象对应的值,否则返回NULL。
Map集合的特点:
Map接口提供了将键映射到值的对象,一个映射不能包含重复的键。
每个键最多只能映射到一个值。
Map集合中元素是通过key、value进行存储的,要获取集合中指定key值或value值,需要先通过相应的方法获取key集合或value集合,再遍历key集合或value集合获取指定值。
Map集合中常用类
- Hashtable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
- HashMap:线程不安全,速度快,允许存放null 键,null值。
- TreeMap:对键进行排序,排序原理与TreeSet 相同。