LinkedHashSet
- LinkedHashSet 去重 无下标
- Linked 有链表的结构 有序
有序:怎么存的顺序 打印出来就什么顺序
LinkedHashSet set = new LinkedHashSet<>();
set.add(“a”);
set.add(“b”);
set.add(“c”);
set.add(“d”);
set.add(“e”);
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
String string = (String) iterator.next();
System.out.println(string);
}
System.out.println(set);
例://利用set集合去除ArrayList集合中的重复元素(操作原ArrayList)
//ArrayList 保存a a, b b, c c, d d
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("c");
list.add("d");
list.add("d");
System.out.println(list);
//创建set集合 去重
HashSet<String> set = new HashSet<>();
set.addAll(list);
System.out.println(set);
//先清空原集合
list.clear();
list.addAll(set);
System.out.println(list);
TreeSet
无序 无下标 不重复
功能:排序
二叉树排序
存规则
- 1.比我小的数 放左边(返回负数时的结果)
- 2.比我打的数 放右边(返回正数时的结果)
取规则
- 从小到大 升序 输出
-
- 注意:只要compareTo 方法返回的是0 就不存
TreeSet排序步骤
- 1.实现Comparable接口
- 2.实现接口中方法
- 3.编写 你的排序规则
例:
//创建TreeSet 保存 4个数字 查看打印结果
TreeSet set = new TreeSet<>();
set.add(12);
set.add(231213);
set.add(1421);
set.add(121);
System.out.println(set);
//TreeSet保存四个人 查看打印结果
TreeSet set = new TreeSet<>();
set.add(new Person(“gorilla1”,18));
set.add(new Person(“gorilla3”,20));
set.add(new Person(“gorilla4”,25));
set.add(new Person(“gorilla2”,19));
System.out.println(set);
//TreeSet保存四个字符串
//按字符串长度排序
//Comparator 比较器 接口
//编写比较规则
//将比较的规则直接传入到TreeSet的构造方法中
TreeSet set = new TreeSet<>(new CompareLength());
set.add(“asa”);
set.add(“asweqdsa”);
set.add(“adsasa”);
set.add(“aseqwea”);
System.out.println(set);
//重写比较规则
//自定义类 实现比较器接口
//泛型: 比较什么对象 就填写相应的对象类型
class CompareLength implements Comparator{
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
//比较字符串长度
int num = o1.length() - o2.length();
return num;
}
}
HashMap
双列集合
Map(双列集合的父接口)
* 1.以键值对形式来存储数据
* key-value 键值对
* 2.键值唯一(键值不能重复)
HashMap 和 HashSet 有什么关系?
- 有关系 依赖关系
- HashSet 依赖 HashMap
- 实际上 向HashSet中添加元素
- 相当于 向 Map的key列 添加元素
HashMap:去重的功能(该功能属于的 key列)
TreeMap:排序的功能(该功能属于的 key列)
例1:
//key 名字 v 年龄
HashMap<String, Integer> map = new HashMap<>();
//添加 键值对元素
//put的返回值 是该键被覆盖的原来的value值
>Integer v1 = map.put("wanglong1", 30);
Integer v2 = map.put("wanglong2", 31);
Integer v3 = map.put("wanglong3", 32);
Integer v4 = map.put("wanglong4", 33);
Integer v5 = map.put("wanglong4", 34);
System.out.println(map);
System.out.println(v1);
System.out.println(v2);
System.out.println(v3);
System.out.println(v4);
System.out.println(v5);
例2:
/**
* map 方法
* 包含 key
* 包含 value
* 获取所有key的Set集合
* 获取所有value集合
* 通过key删除整个键值对
* 清空map
*/
HashMap<String, Integer> map = new HashMap<>();
map.put("wanglong1", 12);
map.put("wanglong2", 22);
map.put("wanglong3", 32);
map.put("wanglong4", 42);
//判断map中是否包含 key
boolean b1 = map.containsKey("wanglong2");
System.out.println(b1);
//是否包含value
boolean b2 = map.containsValue(32);
System.out.println(b2);
//取出所有key的Set集合(核心方法)
Set<String> keySet = map.keySet();
System.out.println(keySet);
//取出所有的Value集合
Collection<Integer> values = map.values();
System.out.println(values);
//删除方法 通过key将整个键值对删除
Integer remove = map.remove("wanglong3");//返回删除的键值对的value值
System.out.println(map);
System.out.println(remove);
//清空map
map.clear();
System.out.println(map);
例3:
//利用Entry对象来遍历Map
//Entry对象中封装了一个键值对对象
//一个key 一个value
HashMap<String, Integer> map = new HashMap<>();
map.put("wanglong1", 33);
map.put("wanglong2", 34);
map.put("wanglong3", 35);
//获取所有Entry对象的Set集合
Set<Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
//取出集合中的每一个Entry对象
Entry<String, Integer> entry = (Entry<String,Integer>) iterator.next();
System.out.println(entry.getKey() + " " + entry.getValue());
}