JAVA part 12 集合
Set集合的特点
Set:
一个不包含重复元素的collection
HashSet:
它不保证set的迭代顺序;特别是他不保证该顺序恒久不变
代码:
package Day_12;
import java.util.HashSet;
import java.util.Set;
public class test1 {
public static void main(String[] args) {
//创建集合对象
Set<String> s = new HashSet<String>();
//添加元素
s.add("hello");
s.add("world");
s.add("java");
//唯一
s.add("world");
//遍历循环
for(String x : s){
System.out.println(x);
}
}
}
HashSet保证元素唯一性的原理
通过查看add方法的源码,我们知道了添加功能的执行过程中,是进行了数据判断的。
这个判断过程是:
首先进行比较对象的哈希值是否相同,这个哈希值是根据对象的hashCode()计算出来的。如果哈希值不同,就直接添加到集合中;如果哈希值相同,继续执行equals()进行比较:返回的是true,说明元素重复,不添加;返回的是false,说明元素不重复,就添加
如果使用HashSet集合存储对象想保证元素的唯一性,就必须重写hashCode()和equals()方法
代码:
package Day_12;
import java.util.HashSet;
public class test2 {
public static void main(String[] args) {
//创建集合对象
HashSet<String> hs = new HashSet<String>();
//添加元素
hs.add("hello");
hs.add("world");
hs.add("java");
hs.add("world");
//遍历集合
for(String s : hs){
System.out.println(s);
}
}
}
Map集合
将键映射到值的对象,一个映射不能包括重复的键:每个键最多有一个值
package Day_12;
import java.util.HashMap;
import java.util.Map;
public class test3 {
public static void main(String[] args) {
//创建结合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
//put(K key, V value):添加对象
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//输出集合对象
System.out.println(map);
}
}
Map集合的成员方法
1.V put(K key, V value):添加元素
2.V remove(Object key):根据键删除键值对元素
3.void clear():清空所有键值对元素
4.boolean containsKey(Object key):判断集合是否包含指定的键
5.boolean containsValue(Object value):判断集合是否包含指定的值
6.boolean isEmpty():判断集合是否为空
7.int size():返回集合中的键值对对数
V put(K key, V value):添加元素
package Day_12;
import java.util.HashMap;
import java.util.Map;
public class test4 {
public static void main(String[] args) {
//创建结合对象
Map<String, String> map = new HashMap<String, String>();
//V put(K key, V value):添加元素
System.out.println("put:"+map.put("001", "成龙"));
System.out.println("put:"+map.put("001", "李连杰"));
//输出集合对象
System.out.println(map);
/*
put:null
put:成龙
{001=李连杰}
*/
}
}
V remove(Object key):根据键删除键值对元素
package Day_12;
import java.util.HashMap;
import java.util.Map;
public class test4 {
public static void main(String[] args) {
//创建结合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//V remove(Object key):根据键删除键值对元素
System.out.println("remove:"+map.remove("001"));
System.out.println("remove:"+map.remove("004"));
//输出集合对象
System.out.println(map);
/*
remove:成龙
remove:null
{002=李连杰, 003=刘德华}
*/
}
}
void clear():清空所有键值对元素
package Day_12;
import java.util.HashMap;
import java.util.Map;
public class test4 {
public static void main(String[] args) {
//创建结合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//void clear():清空所有键值对元素
map.clear();
//输出集合对象
System.out.println(map);
/*
{}
*/
}
}
boolean containsKey(Object key):判断集合是否包含指定的键
package Day_12;
import java.util.HashMap;
import java.util.Map;
public class test4 {
public static void main(String[] args) {
//创建结合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//boolean containsKey(Object key):判断集合是否包含指定的键
System.out.println("containsKey:"+map.containsKey("001"));
System.out.println("containsKey:"+map.containsKey("004"));
//输出集合对象
System.out.println(map);
/*
containsKey:true
containsKey:false
{001=成龙, 002=李连杰, 003=刘德华}
*/
}
}
boolean containsValue(Object value):判断集合是否包含指定的值
package Day_12;
import java.util.HashMap;
import java.util.Map;
public class test4 {
public static void main(String[] args) {
//创建结合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//boolean containsValue(Object value):判断集合是否包含指定的值
System.out.println("containsValue:"+map.containsValue("成龙"));
System.out.println("containsValue:"+map.containsValue("周星驰"));
//输出集合对象
System.out.println(map);
/*
containsValue:true
containsValue:false
{001=成龙, 002=李连杰, 003=刘德华}
*/
}
}
boolean isEmpty():判断集合是否为空
package Day_12;
import java.util.HashMap;
import java.util.Map;
public class test4 {
public static void main(String[] args) {
//创建结合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//boolean isEmpty():判断集合是否为空
System.out.println("isEmpty:"+map.isEmpty());
//输出集合对象
System.out.println(map);
/*
isEmpty:false
{001=成龙, 002=李连杰, 003=刘德华}
*/
}
}
int size():返回集合中的键值对对数
package Day_12;
import java.util.HashMap;
import java.util.Map;
public class test4 {
public static void main(String[] args) {
//创建结合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//int size():返回集合中的键值对对数
System.out.println("size:"+map.size());
//输出集合对象
System.out.println(map);
/*
size:3
{001=成龙, 002=李连杰, 003=刘德华}
*/
}
}
Map集合的获取
1.V get(Object key):根据键获取值
2.Set< K > key Set():获取所有键的集合
3.Collection< V > values():获取所有值的集合
V get(Object key):根据键获取值
package Day_12;
import java.util.HashMap;
import java.util.Map;
public class test5 {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//V get(Object key):根据键获取值
System.out.println("get:"+map.get("001"));
System.out.println("get:"+map.get("004"));
System.out.println(map);
/*
get:成龙
get:null
{001=成龙, 002=李连杰, 003=刘德华}
*/
}
}
Set< K > key Set():获取所有键的集合
package Day_12;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class test5 {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//Set< K > key Set():获取所有键的集合
Set<String> set = map.keySet();
for(String key : set){
System.out.println(key);
}
System.out.println(map);
/*
001
002
003
{001=成龙, 002=李连杰, 003=刘德华}
*/
}
}
Collection< V > values():获取所有值的集合
package Day_12;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class test5 {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//Collection< V > values():获取所有值的集合
Collection<String> values = map.values();
for(String value : values){
System.out.println(value);
}
System.out.println(map);
/*
成龙
李连杰
刘德华
{001=成龙, 002=李连杰, 003=刘德华}
*/
}
}
Map集合的遍历
根据键找值:
1.获取所有键的集合
2.遍历键值对对象的集合,获取到每一个键
根据键找值
package Day_12;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class test6 {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//获取所有键的集合
Set<String> set = map.keySet();
//遍历键的集合,获取每一个值
for(String key : set){
String value = map.get(key);
System.out.println(key+"-----"+value);
}
}
}
根据键值对对象找键和值
1.获取所有键值对对象的集合
2.遍历键值对对象的集合,获取到每一个键值对对象
3.根据键值对对象找键和值
package Day_12;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class test7 {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("001", "成龙");
map.put("002", "李连杰");
map.put("003", "刘德华");
//获取所有键值对对象的集合
//Set<Map.Entry<K, V>> entrySet():获取键值对对象的集合,得到每一个键值对对象
Set<Map.Entry<String, String>> set = map.entrySet();
//遍历键值对对象的集合,得到每一个键值对对象
for(Map.Entry<String, String> me : set){
String key = me.getKey();
String value = me.getValue();
System.out.println(key+"------"+value);
}
}
}
两种遍历方式图解