day 15笔记
一.HashSet
1.此类实现set接口
2.数据结构:是以hash表结构来进行存储的
3.特点:
A.无序 无索引
B.不能重复
C.此类不是同步实现的1,在多线程是不安全的
二.set集合存储元素唯一的原因
三.LinkedHashSet
1.是HashSet的子类
2.具有可预知迭代顺序 Set 接口的哈希表和双链接列表实现
3.特点:
A.有序
B.不可以重复
C.此实现类不是同步的,在多线程也是不安全的
四.案例
需求:从键盘输入一串字符串,有序,去重,
代码:
package com.qf.lt.oop03;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("输入一串字符串:");
String str = input.next();
//实例化Map列表
Map map = new HashMap();
//转换为字符数组
char[] cha = str.toCharArray();
for (int i=0;i< cha.length;i++){
//判断map列表里面是否有了此数据,没有就加进去
if (!map.containsKey(cha[i])){
map.put(cha[i],1);
}else {
//
map.put(cha[i], (Integer)(map.get(cha[i]))+1);
}
}
System.out.println(map);
}
}
五.TreeSet
1.特点:使用元素的自然顺序对元素进行排序 Comparator 进行排序 底层是红黑树
2.排序解释:
A.对数值(基本数据类型 整数 小数)来进行 升序进行排序
B.字符串进行排序是按照 字符串首字母字符的编号来进行排序
C.自定的实体类TreeSet是不能进行排序
3.自定义必须指定的排序的规则
A.定义的类 实现Comparable 重写方法compareTo()
B.定义的规则:
this - object >0 表示当前对象 大于比较对象
this - object <0 表示当前对象 小于比较对象
this - object=0 表示当前对象 等于比较对象
student类:
package com.qf.lt.oop02;
public class Student /*implements Comparable*/{
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
/*@Override
public int compareTo(Object o) {
Student stu = (Student) o;
return this.age- stu.getAge();
}*/
}
测试类:
package com.qf.lt.oop02;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
//使用内部类
Set set = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Student stu1 = (Student)o1;
Student stu2 = (Student)o2;
return stu1.getAge()-stu2.getAge();
}
});
Student stu01 = new Student("张三",15);
Student stu02 = new Student("李四",26);
Student stu03 = new Student("王五",20);
set.add(stu01);
set.add(stu02);
set.add(stu03);
/* //重写student里面实现接口Comparable接口,重写接口里面的Comparator方法
Set set = new TreeSet();
Student stu01 = new Student("张三",15);
Student stu02 = new Student("李四",26);
Student stu03 = new Student("王五",20);
set.add(stu01);
set.add(stu02);
set.add(stu03);*/
System.out.println(set);
}
}
六.Map的概念
1.在生活中,会将一些事物进行对应 ip==>主机 丈夫==>妻子 .....都是一一对应的关系
2.map集合就是一个个一一对应的关系,键值对进行映射 通过键来映射值 key==>value
.键映射值得对象。一个映射不能包含重复的键;每一个键最多只能映射一个值
4.子类: HashMap TreeMap Hashtable
七.HashMap常用的方法
方法的名称 | 方法的描述 |
---|---|
void clear() | 删除map集合中所有的元素 |
boolean containsKey(Object key) | 集合中是否包含指定的key |
boolean containsValue(Object value) | 集合中是否包含指定的值 |
Set<Map.Entry<K,V>> entrySet() | 用于来遍历map集合 |
V get(Object key) | 通过键获取值 |
boolean isEmpty() | 判断集合是否为空 |
Set keySet() | 获取map集合中所有的key |
Collection values() | 获取Map集合中所有的值 |
V put(K key, V value) | 如果key不存在则执行添加,如果key存在则修改value |
V remove(Object key) | 根据key删除整个键值对 |
int size() | 获取集合的长度 |
package com.qf.lt.oop03;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map map =new HashMap();
//添加数据
map.put("邓超","杨幂");
map.put("谢霆锋","王菲");
map.put("张三","李四");
//指定元素的key
map.containsKey("张三");
//获取指定元素的键值对
System.out.println(map.get("邓超"));
//获取map集合里面的所有key或者value
System.out.println(map.keySet());
Collection col = map.values();
System.out.println(col);
System.out.println(map);
}
}
八.Map的第一中遍历方法
代码:
package com.qf.lt.oop03;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test01 {
public static void main(String[] args) {
Map map =new HashMap();
//添加数据
map.put("邓超","杨幂");
map.put("谢霆锋","王菲");
map.put("张三","李四");
//拿到key值,进行遍历
Set set = map.keySet();
//使用增强for循环
/* for (Object obj :set){
System.out.println(obj+"\t"+map.get(obj));
}*/
//使用迭代器
Iterator iter = set.iterator();
while (iter.hasNext()){
//转
Object o = iter.next();
System.out.println(o+"\t"+map.get(o));
}
}
}
九.Map的第二种遍历方法
通过封装对象存储在集合中
代码:
package com.qf.lt.oop03;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test02 {
public static void main(String[] args) {
Map map =new HashMap();
//添加数据
map.put("邓超","杨幂");
map.put("谢霆锋","王菲");
map.put("张三","李四");
//进行封装成对象
Set set = map.entrySet();
/* //增强for循环
for(Object obj:set){
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey()+"\t"+entry.getValue());
}*/
//迭代器
Iterator iterator = set.iterator();
while (iterator.hasNext()){
Object obj = iterator.next();
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey()+"\t"+entry.getValue());
}
}
}