Set集合和Map集合使用

5、Set集合

(1)java.util.Set接口
(2)特点:无序的集合,不能存储重复的元素。
(3)接口不能实例化
(4)抽象方法:
Set接口继承了Collection接口。

int size() 返回此集合中的元素数。
boolean add(E e) 确保此集合包含指定的元素(可选操作)。
boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
void clear() 从此集合中删除所有元素(可选操作)。
boolean isEmpty() 如果此集合不包含元素,则返回 true 。
boolean contains(Object o) 如果此集合包含指定的元素,则返回 true 。
Iterator iterator() 返回此集合中的元素的迭代器。

Set接口没有扩展新方法,但是对add方法进行限制,不允许插入重复元素。

HashSet重复元素的判断:
如果两个对象的hashCode值相等,且使用equals方法比较相等,那么这两个对象事重复的元素。
(5)常用实现类
HashSet、LinkedHashSet、TreeSet

区别:
HashSet有以下特点
1、不能保证元素的排列顺序,顺序有可能发生变化
2、不是同步的
3、集合元素可以是null,但只能放入一个null
当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。
简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相等
LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。
TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。
TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0
(5)Set集合遍历
由于set时是无序的,所以不能用下标来循环,即不能用for(i)循环,所以有以下三种遍历方式

//		遍历
//		方式1:增强for
//		for(Object  o:set) {
//			System.out.println(o);
//		}
		
//		方式2:迭代器
//		Iterator  it=set.iterator();
//		while(it.hasNext()) {
//			Object  o=it.next();
//			System.out.println(o);
//		}
//		方式3:forEach
		set.forEach((o)->{
			System.out.println(o);
		});

6、Map集合

(1)java.util.map接口
(2)不能实例化
(3)特点:
每个元素是一个键值对。
每个元素的键不可重复,也就是唯一的。


> 面试题 List、Set、Map集合有什么区别: List和Set集合都属于Collection集合,每个元素都是一个值。
> List是有序的集合,可以存储重复的元素。 Set集合是无序的集合,不可以存储重复的元素 Map每个元素是一个键值对。

(4)Map接口中的抽象方法:

int size() 返回此地图中键值映射的数量。
V put(K key, V value) 将指定的值与该映射中的指定键相关联(可选操作)。
V get(Object key) 返回到指定键所映射的值,或null如果此映射包含该键的映射。
V remove(Object key) 如果存在(从可选的操作),从该地图中删除一个键的映射。
boolean isEmpty() 如果此地图不包含键值映射,则返回 true 。
void clear() 从该地图中删除所有的映射(可选操作)。
boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回 true 。
boolean containsValue(Object value) 如果此地图将一个或多个键映射到指定的值,则返回 true 。
Set keySet() 返回此地图中包含的键的Set视图。
Collection values() 返回此地图中包含的值的Collection视图。
Set> entrySet() 返回此地图中包含的映射的Set视图。
default void forEach(BiConsumer action) 对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。

(5)常用实现类
HashMap、TreeMap、HashTable
(6)map集合遍历

//      遍历
//		方式1
//		m.forEach((k,v)->{
//			System.out.println(k+"="+v);
//		});
		
//		方式2:
//		Set  keys=m.keySet();
//		for(Object  k:keys) {
//			Object   v=m.get(k);
//			System.out.println(k+"="+v);
//		}
//		方式3:
//		Set  entrys=m.entrySet();
//		for(Object  entry:entrys) {
//			Map.Entry kv=(Map.Entry)entry;
//			System.out.println(kv.getKey()+"="+kv.getValue());
//		}

你可能感兴趣的:(java基础,java,链表)