定义
集合框架是一个用来代表和操纵集合的统一架构。
一、集合框架
集合框架只有三个组件:Map、List和Set,其余的,要么是具体实现类、要么是延伸类。
用一张图来解释Map是无序的、List是有序的、Set是无序了。
二、ArrayList和LinkedList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口。
ArrayList具有以下特点:
- 大小是可变的,是自动增长的。可以动态的增加或减少元素。
- 实现了IColletion和IList接口。
- 它是非同步的集合类。
- 元素可以重复.
LinkedList类用于创建链表数据结构对象。
它继承 AbstractSequentialList类并实现了List、Queue接 口。 跟ArrayList一样,LinkedList也是实现了List接口, 这说明可以根据索引来查询集合内的元素。不过, LinkedList和ArrayList的区别也很明显,由于 LinkedList是实现了双向循环链表,所以元素可以很 快捷的被插入或删除,但是,由于链表的特性,如果 对LinkedList做查询,那么效率也非常低。
package sc.work;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List list = new ArrayList();
LinkedList list1 = new LinkedList();
//添加这个数
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list1.add("5");
list1.add("6");
list1.add("7");
list1.add("8");
//添加到第一个数
list1.addFirst("0");
//添加到最后一个数
list1.addLast("9");
//添加整个整个列表
list.addAll(list);
list.add(list);
//判断是否存在这个值
System.out.println("判断是否存在5这个值:"+list.contains(5));
//列表长度
System.out.println("list的长度是:"+list.size());
//判断两个列表是否相等
System.out.println("list和list1是否相等:"+list.equals(list1));
Iterator it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
Iterator it1 = list1.iterator();
while (it1.hasNext()){
System.out.println(it1.next());
}
}
}
三、HashMap
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
- HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
- HashMap 是无序的,即不会记录插入的顺序。
- HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
package sc.work;
import java.util.*;
public class MapDemo {
public static void main(String[] args) {
Map map = new HashMap();
Map map1 = new LinkedHashMap();
map.put(1,"sc");
map.put(2,"sc1");
map.put(3,"sc2");
map.put(4,"sc4");
map1.put(1,"sc5");
map1.put(1,"sc6");
map1.put(1,"sc7");
map1.put(1,"sc8");
//判断数组是否为空
System.out.println(map1.isEmpty());
//查找键值为1的元素
System.out.println(map.get(1));
Set s = map.keySet();
Collection c = map.values();
Set s1 = map.entrySet();
//循环遍历
Iterator it = s1.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
}
}
四、Set
Set是无序的,所以我们平常用Set的时候比较少,基本用List代替,但特殊情况下也能用到Set。
package sc.work;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
public class SetDemo {
public static void main(String[] args) {
Set set = new HashSet();
set.add("1");
set.add("2");
set.add("布尔");
set.add("3");
set.add("偶尔");
set.add("伊尔");
set.add("4");
set.add("5");
set.add("我局");
System.out.println(set.size());
set.remove("3");
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
五、Iterator
- Iterator叫做“迭代器”,它提供一种方法访问一个 容器(container)对象中各个元素,而又不需暴露 该对象的内部细节 。
- 由于Collection接口继承了Iterator,所以所有集合 对象都可以被迭代, Collection接口内定义了 iterator()方法,能获得一个Iterator迭代器,从而实 现对集合的迭代。
Set set = map.keySet();
Iterator iter = set.iterator();
while(iter.hasNext()){
Object Key = iter.next();
Object Value = map.get(Key);
System.out.println(Value+"\t"+Key);
}
对于List集合来说,通过listIterator()方法可以获得 一个功能更为强大的列表迭代器ListIterator, ListIterator扩展了Iterator,它不仅能正向遍历,还 能反向遍历。
六、总结
- 集合框架(JCF)的根接口为Collection,有Set、List 等子接口,所有集合类均具有一些共同的方法,它们 的主要区别在于实现的数据结构不同
- Map接口用于存储映射关系,其实现类有HashMap 和TreeMap等
- Iterator迭代器能不暴露内部细节的情况下访问集合元素
- Collections类对集合框架提供了支持
- Arrays类提供了对数组的操作支持,同时提供了数组 到集合的转化方法asList( )