Set集合
1.Set接口
1.数据不可以重复
2.没有顺序
3.没有下标
2.HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。
3.在往HashSet中存放对象时,会调用对象的HashCode()方法,计算哈希值,哈希值不相同,再调用equals()方法,没有重复内容才存入
public class HashSetDemo { public static void main(String[] args) { //创建HashSet对象 HashSet hs = new HashSet(); //给集合中添加自定义对象 hs.add(new Student("zhangsan",21)); hs.add(new Student("lisi",22)); hs.add(new Student("wangwu",23)); hs.add(new Student("zhangsan",21)); //取出集合中的每个元素 Iterator it = hs.iterator(); while(it.hasNext()){ Student s = (Student)it.next(); System.out.println(s); } } }
4.LinkedHashSet
1.怎么存怎么取
2.不能重复
3.没有下标
public class LinkedHashSetDemo { public static void main(String[] args) { Set<String> set = new LinkedHashSet<String>(); set.add("bbb"); set.add("aaa"); set.add("abc"); set.add("bbc"); Iterator it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
5.判断集合元素唯一的原理
1.ArrayList集合的contains()方法,返回值是布尔值
2.HashSet的在调用add方法时会调用HashCode()和equals()方法
3.存储自定义类型元素时,需重写HashCode()和equals()方法
6.Map接口
1.Map集合中的元素是成对存在的,通过键可以找到相应的值
2.Map是双列集合
3.Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
7.Map集合常用方法
1.get()方法,通过key获得值
2.put()方法,把key和值存入集合
3.remove()方法,根据key删除值
8.Map集合遍历
1.keyset()方法
1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键
2.遍历键的Set集合,得到每一个键
3.根据键,获取键所对应的值
public class MapDemo { public static void main(String[] args) { //创建Map对象 Map<String, String> map = new HashMap<String,String>(); //给map中添加元素 map.put("邓超", "孙俪"); map.put("李晨", "范冰冰"); map.put("刘德华", "柳岩"); //获取Map中的所有key Set<String> keySet = map.keySet(); //遍历存放所有key的Set集合 Iterator<String> it =keySet.iterator(); while(it.hasNext()){ //得到每一个key String key = it.next(); //通过key获取对应的value String value = map.get(key); System.out.println(key+"="+value); } } }
public static void main(String[] args) { //大map HashMap<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>(); //创建两个小map HashMap<Person,String> java0803=new HashMap<Person,String>(); HashMap<Person,String> java0903=new HashMap<Person,String>(); //存值 java0803.put(new Person("小红帽",18), "山东淄博"); java0803.put(new Person("大灰狼",18), "山东济南"); java0903.put(new Person("小白兔",20), "山东淄博"); java0903.put(new Person("派大星",21), "山东济南"); map.put("java0803", java0803); map.put("java0903", java0903); //keyset+增强for //获取大map中所有key所在的set集合 Set<String> bigKeys=map.keySet(); //遍历取到每一个key值得到每一个value值 for(String bigkey:bigKeys) { HashMap<Person,String> smallMap=map.get(bigkey); //获取小map所有key所在的set集合 Set<Person> smallKeys=smallMap.keySet(); for(Person skey:smallKeys) { //根据Key值获取对应的value值 System.out.println(bigkey+"--"+skey+"--"+smallMap.get(skey)); } } }
public static void main(String[] args) { //大map HashMap<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>(); //创建两个小map HashMap<Person,String> java0803=new HashMap<Person,String>(); HashMap<Person,String> java0903=new HashMap<Person,String>(); //存值 java0803.put(new Person("小红帽",18), "山东淄博"); java0803.put(new Person("大灰狼",18), "山东济南"); java0903.put(new Person("小白兔",20), "山东淄博"); java0903.put(new Person("派大星",21), "山东济南"); map.put("java0803", java0803); map.put("java0903", java0903); //keyset+迭代器 //先获取大map所有key所在的set集合 Set<String> bigkeys=map.keySet(); Iterator<String> it=bigkeys.iterator(); while(it.hasNext()) { //获取到大map中每一个key值 String bigkey=it.next(); HashMap<Person,String> smallmap=map.get(bigkey); //获取所有key所在的set集合 Set<Person> skeys=smallmap.keySet(); Iterator<Person> itt=skeys.iterator(); while(itt.hasNext()) { //获取每一个小map中的key Person skey=itt.next(); System.out.println(bigkey+"--"+skey+"--"+smallmap.get(skey)); } } } }
2.EntrySet()方法
public static void main(String[] args) { //大map HashMap<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>(); //创建两个小map HashMap<Person,String> java0803=new HashMap<Person,String>(); HashMap<Person,String> java0903=new HashMap<Person,String>(); //存值 java0803.put(new Person("小红帽",18), "山东淄博"); java0803.put(new Person("大灰狼",18), "山东济南"); java0903.put(new Person("小白兔",20), "山东淄博"); java0903.put(new Person("派大星",21), "山东济南"); map.put("java0803", java0803); map.put("java0903", java0903); //获取大map结婚证对象集合Set Set<Map.Entry<String, HashMap<Person,String>>> set=map.entrySet(); for(Map.Entry<String, HashMap<Person,String>> s:set) { //获取大map中的key和value HashMap<Person,String> h=s.getValue(); //获取小map结婚证对象集合Set Set<Map.Entry<Person,String>> s1=h.entrySet(); for(Map.Entry<Person,String> m:s1) { //获取小map中的key和value System.out.println(s.getKey()+"--"+m.getKey()+"--"+m.getValue()); } }
public static void main(String[] args) { //大map HashMap<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>(); //创建两个小map HashMap<Person,String> java0803=new HashMap<Person,String>(); HashMap<Person,String> java0903=new HashMap<Person,String>(); //存值 java0803.put(new Person("小红帽",18), "山东淄博"); java0803.put(new Person("大灰狼",18), "山东济南"); java0903.put(new Person("小白兔",20), "山东淄博"); java0903.put(new Person("派大星",21), "山东济南"); map.put("java0803", java0803); map.put("java0903", java0903); //获取大map中所有的结婚证对象所在的set集合 Set<Map.Entry<String, HashMap<Person,String>>> s1=map.entrySet(); //转换为迭代器对象 Iterator<Map.Entry<String, HashMap<Person,String>>> it=s1.iterator(); while(it.hasNext()) { //获取entry对象 Map.Entry<String, HashMap<Person,String>> m=it.next(); //获取小map HashMap<Person,String> m1=m.getValue(); //获取小map对象集合 Set<Map.Entry<Person,String>> s2=m1.entrySet(); //获取小map对象集合的迭代器 Iterator<Map.Entry<Person,String>> it2=s2.iterator(); while(it2.hasNext()) { //获取每一个小map对象 Map.Entry<Person,String> m3=it2.next(); System.out.println(m.getKey()+"--"+m3.getKey()+"--"+m3.getValue()); } }
浙公网安备 33010602011771号