1 集合框架 collection、 Map
Collection 是集合框架中的 一个顶层接口 表示一组对象 存放单列数据 List和Set是Collection的子接口,其中List 元素是根据添加的前后顺序存储的,是有序的;并且可以根据索引 访问元素,搜索元素,而Set 是一个不包括重复元素的collection 不允许存放两个相等的对象,而且Set集合中的元素是无序的
Map 也是集合框架中的顶层接口 存放键值对(双列数据)2 Collection和Map的集合框架图如下:
Collection 集合框架的一个顶层接口,存储单列数据 表示一组对象,这些对象也称为collection的元素
|
|----List collection的子接口 元素根据添加的顺序存储,是有序的 并且可以根据索引访问和获取元素
| |--ArrayList 接口的实现类 底层数据结构:数组 不同步 线程不安全 长度是固定的
| |--LinkedList 接口的实现类 底层数据结构:链表 不同步 线程不安全
| |--Vector 接口的实现类 底层数据结构:数组 同步 线程安全 大小根据需要增加或减少
|
|----Set collection的子接口 不包含重复元素 并且元素存储是按照内部的排序后存储,是无序的
|--HashSet 接口实现类 底层数据结构 :哈希表 不同步 线程不安全
| 依据 hashCode和equals 方法保证元素的唯一性 并且优先判断HashCode值,值相同时才会调用equals
|
|--TreeSet 接口实现类 底层数据结构: 二叉树 不同步 线程不安全
依据compareTo方法返回0 保证元素唯一性
可以对Set集合中的元素进行排序 ,实现方法有两种:
a 使元素自身具备比较性:实现Comparable接口,覆盖compareTo方法
b使集合自身具备比较性:在集合初始化时就有了比较方法,定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。当两种排序都存在时,以比较器为主。
3 迭代器
迭代器是Collection集合中取出元素的方式,可以直接访问集合中的元素。所以将迭代器通过内部类的形式来进行描述,通过容器的iterator()方法获取该内部类的对象。
实例如下:
public static void getElement()
{
ArrayList al = new ArrayList();
//1,添加元素。
al.add("java01");//add(Object obj);
al.add("java02");
al.add("java03");
al.add("java04");
Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素。
while(it.hasNext())
{
sop(it.next());//打印集合元素
}
}
public static void sop(Object obj)//打印函数
{
System.out.println(obj);
}
4 Map集合的两种取出方式:
a Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
b Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口,这是因为只有有了Map集合,有了键值对,才会有键值的映射关系,这个关系属于Map集合中的一个内部事物,而且该事物在直接访问Map集合中的元素。
实例如下:
class MapTest
{
public static void main(String[] args)
{
Map<String,String> map = new HashMap<String,String>();
map.put("02","zh2");
map.put("03","wang3");
map.put("01","zh1");
map.put("04","zh3");
//将Map集合中的映射关系取出。存入到Set集合中。
Set<Map.Entry<String,String>> entrySet = map.entrySet();
Iterator<Map.Entry<String,String>> it = entrySet.iterator();
while(it.hasNext())//遍历该集合
{
Map.Entry<String,String> me = it.next();
String key = me.getKey();
String value = me.getValue();
System.out.println(key+":"+value);//打印键和值
}
Set<String> keySet = map.keySet();//先获取map集合的所有键的Set集合,keySet();
Iterator<String> it = keySet.iterator();//有了Set集合。就可以获取其迭代器。
while(it.hasNext())
{
String key = it.next();
String value = map.get(key);//有了键可以通过map集合的get方法获取其对应的值。
System.out.println("key:"+key+",value:"+value);
}
}
}