集合类
官方说法将它看成一个容器,集合中的各个对象,很容易将其从集合中取出来,也很容易将其存放到集合中,还可以将其按照一定的顺序进行摆放
12.1集合类概述
相比于数组,集合没有边界,且不会占用过多内存,拿服务器举例,一个用数组来存用户数据,当他的用户数量超过数组长度,数据将存储不下,这时需要停服维护,且你不知道下一次该把数组改多大,会有多少用户注册,另一个使用集合来存储用户数据,当用户量超过当前容量,集合会适当扩大容量,可以把它看作火车,车厢不够可以加,但数组不能,所以相比于数组,集合的用处和实用性都远高于数组
常用的集合类有List集合,Set集合和Map集合,其中List集合和Set集合继承了Collection接口,各接口提供了不同的实现类
下图是集合类的继承关系:
12.2Collection接口
Collection接口时层次结构中的接口,构成Collection的单位称为元素,它不能直接使用,但是提供了方法,例如添加元素,删除元素,管理元素。因为List接口和Set接口都继承了Collection接口,所以这些方法,List集合和Set集合都是通用的
下图是Collection接口的常用方法:
例题12.1
12.3List接口
12.3.1List接口
List接口继承了Collection接口,因此包含Collection接口中的所以方法,此外,它还有两个非常重要的方法
get(int index):获取指定索引位置的元素
set(int index,Object obj):将集合中指定索引位置的对象修改为指定的对象
12.3.2List接口的实现类
List接口的常用实现类有ArrayList类与LinkedList类
ArrayList类:实现了可变的数组,允许保存所有元素,包括null,并可根据索引位置对集合进行快速的随机访问。缺点就是向指定的u怂恿位置插入对象或删除对象的速度较慢。
LinkedList类:采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象。需要向集合中插入,删除对象时,使用LinkedList类实现的List集合的效率更高,但对于随机访问合集中的对象,使用LiknedList类实现List集合的效率较低。
实例化List集合的代码如下:
List<E> list = new ArrayList<>();
List<E> list2 = new LinkedList<>();
12.4Set集合
Set接口常用的实现类有HshSet类与TreeSet类
HashSet类实现Set接口,由哈希表支持,他不保证Set集合的迭代顺序,特别是它不保证顺序恒久不变。此类允许使用null元素
TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,因此TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可按照指定比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序
例题12.3
12.5Map类
Map集合没有继承Collerction接口,,其提供的是key到value的映射。Map集合中不能包含相同的key,每个key只能映射一个value。
12.5.1Map接口
Map接口提供了将key映射到值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个值
12.5.2Map接口的实现类
常用的接口有HashMap类和TreeMap类。
HashMap类:
是基于哈希表的Map接口,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。
TreeMap类:
不仅实现了Map接口,还实现了java,util.SortedMap接口,因此集合中的映射关系具有一定的顺序。但在添加,删除和定位映射关系时,TreeMap类比HashMap类性能稍差。
package 十二;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapText {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("ISBN-978654","java从入门到精通");
map.put("ISBN-978361","Android从入门到精通");
map.put("ISBN-978893","21天学Android");
map.put("ISBN-978361","21天学java");
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
System.out.println("key 值:");
while (it.hasNext()){
String key = it.next();
String value = map.get(key);
System.out.println(key + " " + value);
}
/*
* Collection<String> coll = map.values(); it = coll.iterator();
* System.out.println("\nvalue 值:"); while (it.hasNext()){
* System.out.print(it.next() + " "); }
*/
}
}