基于JavaSE阶段下的集合类汇总
一.数组与集合的区别
数组和集合都是用来存储对象的容器,但是,数组只能储存基本数据类型的对象,且长度不可变;而集合是储存引用数据类型的对象,且长度可变,所以,在不知对象数量的具体数值时一般用集合来存储。
二.javaSE阶段下的层次图
从层次图可以来看,集合类是以接口来实现的,其中<E>和<K,V>为泛型,简单来说,泛型就是所引用的对象类型,集合主要分为单列集合和双列集合,Iterator迭代器只是集合的运用,从而实现了Iterator接口,用于遍历集合中元素的接口,主要运用无序集合跟增强for循环联合使用。
三.Iterator迭代器和增强for循环
1.Iterator接口主要包含三种方法:①.hasNext();//是否还有下一个元素;②.next();//返回下一个元素;③.remove();//删除当前元素。
2.增强for循环:
①.从jdk1.5出现的新特性,其作用为简化迭代器的书写格式(注:增强for循环的底层还是使用了迭代器遍历。),用于实现了Iterable接口的对象或者是数组对象;
②.增强for循环的格式,for(数据类型 变量名 :遍历的目标){ }
③.注意的事项:
- 增强for循环底层也是使用了迭代器获取的,只不过获取迭代器由jvm完成,不需要我们获取迭代器而已,所以在使用增强for循环变量元素的过程中不准使用集合对象对集合的元素个数进行修改;
- 增强for循环变量集合的元素时,不能调用迭代器的remove方法来删除元素;
- 增强for循环一定要有遍历的目标。
四.单列集合Collection以及Collections工具类
1.List(有序,有索引,可重复)
List存放的对象可以按照一定的顺序排列,故查询速度快,但是在添加或者删除时,会使得后面数据的相应的移动,故而将会变得缓慢,常见的List集合有ArrayList集合等。
2.Set(无序,无索引,不可重复)
Set跟List集合是相反的,因而是无序,故查询较慢,相反则增删较快,常见的Set集合有HashSet集合等。
3.Collections工具类
Collections工具类只是在使用Collection接口时,所有的子类或者子接口都可以继承此工具类,使用里面的方法来简化实现方法的作用。
五.双列集合Map
1.Map及其HashMap,HashTable
Map和HashMap的用法一致,二者都是无序,不可重复的,其键(K)不能重复,值(V)可以重复,根据键得到值;HashMap是最常用的Map,根据键的HashCode值存储数据,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。因为键对象不可以重复,所以HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null,是非同步的;Hashtable与HashMap类似,是HashMap的线程安全版,它支持线程的同步,即任一时刻只有一个线程能写HashTable,从而也导致了HashTale在写入时会比较慢,它继承自Dictionary类,不同的是它不允许记录的键或者值为Null,同时效率较低。
2.Map的两种遍历方式
①.keySet()
将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key 。
取到的结果会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet()方法,而这个方法返回的Set结果,里面的数据是乱序排放的。
典型用法如下:
Map<String,String> map = new HashMap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
Set<String> keys = map.keySet();//先获取Map集合的所有键的Set集合,keySet()
Iterator<String> it =keys.iterator();
//获取迭代器
while(it.hasNext()){
String key = it.next();
String value = map.get(key);
//打印key和value值
System.out.println(key+"="+value);
}
②.entrySet()
Set<Map.Entry<K,V>> entrySet(),返回此映射中包含的映射关系的 Set 视图。就是把(key,value)作为一个整体一对一对地存放到Set集合当中的。Map.Entry表示映射关系。entrySet():迭代后可以entry.getKey(),entry.getValue()两种方法来取key和value。返回的是Entry接口,效率较高。
典型用法如下:
Map<String,String> map = new HashMap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
Set<Map.Entry<String,String>>entrys = map.entrySet();//先获取Map集合的所有键的Set集合,entrySet()
Iterator<Map.Entry<String,String>> it =entrys.iterator();
//获取迭代器
while(it.hasNext()){
Map.Entry<String,String> entry = it.next();
String key =entry.getKey();
String value = entry.getValue();
System.out.println("键:"+key + ",值:" + value);
}