• 017.day17 Map接口 克隆 treeSet集合排重缺陷


    复习昨日

    1. treeSet集合排重缺陷

    当treeset集合同时存有基本数据类型和引用类型时,当基本数据相同,引用数据也相同时,不能将其排重

    原因是引用数据指向了不同的地址,treeset集合中hashcode不同,判定为不同对象,所以不排重

    2.解决办法

    重写compare方法时拆箱

    public class ProductComparator implements Comparator<Product> {
    	@Override
    	public int compare(Product newProduct, Product oldProduct) {
            // 拆箱
    		if (newProduct.getPrice().intValue() == oldProduct.getPrice().intValue() && newProduct.getName().equals(oldProduct.getName())) {
    			return 0;
    		}
    		if (newProduct.getPrice() >= oldProduct.getPrice()) {
    			return -1;
    		}else {
    			return 1;
    		}
    	}
    }
    
    // TODO 自定义比较器
    		Set<Product> set = new TreeSet<>(new ProductComparator());
    		set.add(new Product("日常用品",300));
    		set.add(new Product("汽车配件",500));
    		set.add(new Product("食品",100));
    		set.add(new Product("电子产品",3000));
    		set.add(new Product("电子产品",3000));
    		
    		for (Product product : set) {
    			System.out.println(product);
                //Product [name=电子产品, price=3000, shop=null]
    		   //Product [name=汽车配件, price=500, shop=null]
    		   //Product [name=日常用品, price=300, shop=null]
    		   //Product [name=食品, price=100, shop=null]
                // 排重成功
    		}
    

    今日内容

    1.Map接口

    1.常用方法

    2.存储特点

    将键映射到值:键值对,一个映射不能包含重复的键,每个键只能映射一个值

    3.常用实现类

    4.Map集合的遍历
    // TODO Map结构基本用法 - 添加/取出元素 - 遍历
    		// Map结构的定义 - 可以指定key-value对应结构的两个泛型
    		Map<String, String> map = new HashMap<>();
    		// 添加元素的方式 put()
    		map.put("name", "sand");
    		map.put("age", "20");
    		map.put("sex", "男");
    		// 取出元素的方式get() - 不存在对应的key时,返回null(空对象)
    		System.out.println(map.get("name")); // sand
    		System.out.println(map.get("phone"));// null
    		// 遍历方式1:keySet()方式 
    		Set<String> keys = map.keySet();// 得到key的Set集合(获得键的集合)
    		// 再根据keys获得相应的value
    		for (String key : keys) {
    			System.out.println(key + "--" + map.get(key));
    		}
    		// 遍历方式2:entrySet
    		Set<Entry<String, String>> entries = map.entrySet(); //得到键值对的集合 返回值是Entry类型的集合
    		for (Entry<String, String> entry : entries) {
    			System.out.println(entry);
    //			sex=男
    //			name=sand
    //			age=20
    			// 可以通过键值对获得键,值
    			System.out.println(entry.getKey() + "--" + entry.getValue());
    //			sex--男
    //			name--sand
    //			age--20
    		}
    
    // TODO 向Map集合中存放自定义类型
    		// key的存放特点与Set一致,不能重复的元素
    		// 不同点,当出现相同的key时,对应的value会被覆盖
    		Map<String, Student> map = new HashMap<>();
    		map.put("001", new Student("sand",19));
    		map.put("002", new Student("tom",22));
    		map.put("003", new Student("jerry",23));
    		map.put("003", new Student("jerry",20));
    		System.out.println(map.size());
    		for (String key : map.keySet()) {
    			System.out.println(key + "--" + map.get(key));
    		}
    //		3
    //		001--Student [name=sand, age=19]
    //		002--Student [name=tom, age=22]
    //		003--Student [name=jerry, age=20]
    

    2.克隆

    将一个对象的状态(包含的属性信息等)完全复制,且和原对象之间互不干扰

    • 浅克隆:当对象中只包含基本数据类型及字符串的属性时,无问题
    • 浅克隆:当对象中包含另外的自定义类型作为成员变量时,会造成指向相同
    • 深度克隆:解决浅克隆中出现的问题,但是当对象之间的关系较为复杂时,每次重写clone方法会使得在编码阶段较为繁琐
    1.浅克隆

    2.深克隆

  • 相关阅读:
    iOS7 界面适配-NavigationBar StateBar
    ios UIScrollView 基础属性
    保存图片信息通过NSData保存到本地文件中
    根据UIScrollView 滑动获取当前页数
    iOS工程通用模块介绍
    ios--appDelegate切换根视图rootViewController(最常用的场合是首次启动跳至导航ViewController)
    使用UIGestureRecognizer监听屏幕事件
    Introduction to CocoaPods Tutorial
    最基本的添加头像
    MFC多语言程序版本,在不同的windows系统上的使用 FP_SetThreadUILanguage
  • 原文地址:https://www.cnblogs.com/yokii/p/9428524.html
Copyright © 2020-2023  润新知