一、集合Set
概念:Set集合是一个存储不重复的、无序的数据的集合,它不像List一样,每个数据都有对应的下标,它也是继承Collecion接口的一个接口,拥有Collection接口的全部方法。
特点:1.Set集合中的数据是不重复的。
2.Set集合中的数据是不重复的。
3.Set集合中可以存放null,但是只能存一个。
HashSet类:本类是用于存储HashMap中的Key,然后再通过HashSet的迭代器来对HashMap来迭代遍历。
TreeSet 类:没看,有兴趣可以看一下。
二、集合Map
概念:前面讲的Collection接口是单列集合,而Map接口是双列集合,Map,,Key是键,不可以重复,value是值可以重复,每个key对应相应的值,key不可以重复,否则会被覆盖,但是value可以重复。
特点:1.Map可以根据key来提取对应的value
2.Map键不可以重复,如果重复的话,值会被覆盖
3.Map存放的是无序的数据。
4.Map的初始容量是16,默认的加载因子是0.75.
HashMap类:本类是Map的实现类,可以实现Map的所有方法,是我们常用的类。HashMap底层是一个Entry[ ]数组,当存放数据时,会根据hash算法来计算数据的存放位置算法:hash(key)%n , n就是数组的长度,其实也就是集合的容量。当计算的位置没有数据的时候,会直接存放数据当计算的位置,有数据时,会发生hash冲突/hash碰撞,解决的办法就是采用链表的结构,在数组中指定位置处已有元素之后插入新的元素,也就是说数组中的元素都是最早加入的节点。
迭代方式:有两种
1.
Map<Integer,String> map = new HashMap<>();
map.put(1001,"大娃");//向集合中添加数据
map.put(1002,"二娃"); map.put(1003,"三娃");
map.put(1004,"四娃");
Set<Integer> keySet = map.keySet();//创建Set对象
Iterator<Integer> it = keySet.iterator();//先获取集合的迭代器对象
while(it.hasNext()){
Integer key = it.next();//拿到当前遍历到的key
String value = map.get(key);//通过刚刚拿到的key获取对应的value
System.out.println("{"+key+"="+value+"}");
}
2.
Map<Integer,String> map = new HashMap<>();
map.put(1001,"大娃");//向集合中添加数据
map.put(1002,"二娃"); map.put(1003,"三娃");
map.put(1004,"四娃");
Set<Map.Entry<Integer,String>> entrySet = map.entrySet();//创建Set对象
Iterator<Map.Entry<Integer,String>> it2 = entrySet.iterator();//获取迭代器
while (it2.hasNext()){
Map.Entry<Integer,String> entry = it2.next();//获取当前集合遍历到的entry对象
Integer key = entry.getKey();//获取当前entry中存着的key
String value = entry.getValue();//获取当前entry中存着的value
System.out.println("{"+key+"="+value+"}");
}