Set: Collection的子接口
特点:元素内容不可以重复 元素无序无下标
常见方法:【重点】
boolean add(E e) 向集合中添加一个元素
boolean remove(Object o) 根据元素内容从集合中移除第1个匹配的元素
boolean contains(Object o) 判断集合中是否包含给定的元素
int size() 返回此 collection 中的元素数
Object[] toArray() 返回包含此 collection 中所有元素的数组
遍历方式
for-each遍历
实现类:
HashSet
① 计算元素的哈希码,然后%数组长度获取下标index
② 尝试将元素添加到index处,如果该位置之前没有元素占据,直接添加
如果该位置之前已经存有元素,则通过equals方法比较排重
为保证HashSet添加元素内容不重复,必须保证内容相同的元素返回相同的哈希码
自定义类型保证元素内容不重复,必须重写hashCode和equals方法
hashCode重写要求:【重点】
① 内容相同的对象必须返回相同的哈希码
② 为保证效率,尽可能的保证内容不同的对象返回不同的哈希码
LinkedHashSet HashSet的子类
自定义类型保证元素内容不重复,要求和HashSet一致
可以保证获取顺序和添加顺序的一致!!!
TreeSet
可以根据元素内容自动的进行升序(从小到大)排列
自定义类型使用TreeSet进行排序(包含排重)必须要实现Comparable接口
Map:
特点:一个元素由2部分(key 和 value)组成,其中key不可以重复,value可以重复
常见方法:【重点】
V put(K key, V value) 添加键值对到Map集合中,如果之前Map中有相同键的键值对,则替换掉原有的值并返回
V remove(Object key) 根据指定的键从Map中移除整个键值对,将移除的键值对的值返回
V get(Object key) 根据key从Map中获取value,如果Map中不包含该键值对,返回null
int size() 返回Map中键值对的数量
boolean containsKey(Object key) 判断Map中是否包含指定的键
boolean containsValue(Object value) 判断Map中是否包含指定的值
Map的遍历
①键遍历 【重点】
//①获取Map中所有key组成的Set集合
Set<String> set = map.keySet();
//②遍历Set集合
for(String key:set){
String value = map.get(key);
System.out.println(key +"-->"+value);
}
②值遍历
//①获取Map中所有值组成的Collection集合
Collection<String> c = map.values();
//②遍历集合
for(String value:c){
System.out.println(value);
}
③键值对遍历
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("xucc", 38);
map.put("liuyahui", 30);
map.put("fanmingwei", 28);
map.put("xushy", 18);
//① 获取所有键值对对象(Map.Entry)组成的Set集合
Set< Map.Entry<String, Integer> > set = map.entrySet();
//② 遍历Set集合,得到键值对对象,通过getKey和getValue获取键值对对象包含的键值数据
for(Map.Entry<String, Integer> e:set){
String key = e.getKey();
Integer value = e.getValue();
System.out.println(key +"-->"+ value);
}
实现类:
HashMap 数组实现 线程不安全轻量级实现效率高 允许null键值对
自定义类型做key时,为保证内容不重复,必须重写hashCode和equals
LinkedHashMap 数组+链表
HashMap的子类,自定义类型做key时,要求同HashMap
可以保证获取顺序和添加顺序一致
TreeMap 红黑树
可以根据key的内容自动的升序排列
Hashtable 数组实现 线程安全重量级实现效率低 不允许null键值对
Properties Hashatable的子类
键和值的类型都是字符串类型,常用于读取配置文件