大家好,我们又见面了还是下面一张图
上期我们讲了我们的List集合框架的一些特点,这期我们来讲第二个集合框架
set集合框架
一.Set
1、set集合的特点
1.1 无序
我们运行一下代码
Set set=new HashSet();
set.add("aa");
set.add("大聪明");
set.add("哈哈哈");
set.add("嘿嘿嘿");
for (Object object : set) {
System.out.println(object);
}
如下图:
如上图可以知道打印后顺序与增加的顺序不一致了,这验证了Set集合的无序
1.2.元素不可以重复
我们运行以下代码
Set set=new HashSet();
set.add("aa");
set.add("大聪明");
set.add("哈哈哈");
set.add("嘿嘿嘿");
for (Object object : set) {
System.out.println(object);
}
System.out.println("---------------");
set.add("aa");
for (Object object : set) {
System.out.println(object);
}
如上诉代码我们可以看到我们新增了一个重复的元素,当打印重来后却没有看到重复的元素,
这验证了我们Set集合的元素不可重复这一特点
2、遍历方式
Set集合的遍历方式只有两种
2.1 .foreach方法
for (Object object : set) {
System.out.println(object);
}
2.2 迭代器
Iterator it = set.iterator();
while(it.hasNext()) {
Object object = it.next();
System.out.println(object);
}
3.常见实现类
HashSet
TreeSet:根据某种(规则对里面的元素进行排序)
自然比较接口: java.lang.Comparable
比较器: java.util.Comparator
String以AscII码进行比较,返回差值
LinkedHashSet:
1)元素是有顺序的
2)元素是不重复的
3)底层数据结构是按照链表的结构存储的 Linked
这里也推荐一个实用的工具类
Collctions,大家在网上可以搜索这个,有大量的方法,大家感兴趣的可以取研究研究
二、Map集合(不继承Conllection接口)
1.特点:无序、以键值对的形式存储数据、键不可以重复(Set),值可以重复(List)
我们先用代码来验证map集合的无序
Map<String, Object> map=new HashMap<String,Object>();
map.put("大聪明", "aa");
map.put("小明", "bb");
map.put("大黄", "cc");
map.put("小红", "dd");
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object object = map.get(string);
System.out.println(string+"="+object);
}
打印结果
可以看到我们增加的顺序与打印的结果顺序不一致,验证了map集合的特点1无序
在用以下代码运行得到
map.put("小红", "dd1");
for (String string : keySet) {
Object object = map.get(string);
System.out.println(string+"="+object);
}
这个结合我们上面代码在添加的
输出结果
可以看到我们后续增加的值键是一致的,并且把前面一致的键,值覆盖了 ,这验证的map键不能重复
2.遍历方式
先获取map集合中的键的set集合,在通过键获取map集合中的值
Map<String, Object> map=new HashMap<String,Object>();
map.put("大聪明", "aa");
map.put("小明", "bb");
map.put("大黄", "cc");
map.put("小红", "dd");
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object object = map.get(string);
System.out.println(string+"="+object);
}
获取map集合中的键值对(entry)的set集合,在分别从entry中获取键和值
Set<Entry<String, Object>> entrySet = map.entrySet();
for (Entry<String, Object> entry : entrySet) {
System.out.println(entry);
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
个人还是推荐第二种,可以随意拿到键或者值
3.HashMap与HashTable之间的区别
同步既排队 线程安全的 hashtable 键不可以为null,值也不能为null
异步 非安全的 hashmap 键可以为null,值也可以为null