c++ map iterator 获取key_Set/map/thread/collection

Set

继承Collection

不允许存储重复的内容

没有索引,不能用for 循环遍历

Treeset

特点:

无序,不可重复

底层结构: 红黑树进行存储

有序(自动从小到达升序排序)

可以定义比较规则,排序规则,并且可以使用去重原则

内部比较器|自然排序: 实现Comparable接口,重写comparaTo方法,在方法中定义比较规则.,默认的比较规则

//根据年龄进行比较,年龄相同就是一个对象

外部比较器|指定比较器:实现一个Comparator接口,重写compare()方法,方法的内部定义比较规则

//外部比较器定义的比较规则,现在只能比较Person对象,因为有泛型

HashSet

不允许存储重复的内容

没有索引,不能用for 循环遍历

无序,存储的与拿出的顺序可能不同

底层为Hashcode链表结构

处理HashSet存储的自定义引用数据类型去重问题:
需要对这个对象类型中重写hashcode和equals方法,然后这个两个的值都根据对象的成员属性值进行计算,而非地址值
hash表结构的特点是先调用hashcode,如果值形同的对象才会进一步调用equals方法进行比较内容,如果hashcode值不相同,根本不会比较equals方法的值
//重写equals方法,比较对象时比较对象的内容,非地址

Map

存储的每一个数据都是一个键值对形式存在的 k,v

key 无序的,唯一的 -->就是一个set集合

value 无序的,可重复的

一个key对象一个value,两者之间存在映射关系

如果存储数据的时候,key相同,value的值会覆盖

方法:

// V get(Object key)

System

// V remove(Object key)

System

Map的遍历方式:

1.获取所有key,根据key拿value keySet()

2.获取所有的value, values() 这中遍历方式无法获取key,只能遍历所有的value

3.entrySet() 获取所有的键值对,每一个键值对都是一个Map.ENTRY类型的数据,所有的Map.ENTRY类型的数据放在一个set集合中

import 

HashMap

HashMap如果key是自定义的引用数据类型,去重问题:需要给key数据的类型重写hashcode和equals方法,能达到去重特点

key的值相同value的值不覆盖,需要在put之前进行判断

import 

TreeaMap的特点是:其中数据会自动升序排序,根据学生的身高进行排序

1.去重

实现内部|外部比较器 比较的原则根据key,不能根据value

2.根据需求排序

​ key的内容决定排序和去重的原则,这是TreeMap默认的比较过程

public 

Properties

Properties Properties 可保存在流中或从流中加载。 key与value都是字符串类型的数据

配置文件使用: *
1.项目右键->source floder->file->添加键值对类型的数据 *
2.通过Properties 的load方法,从资源文件中获取资源流,读入数据

cca1cda8d8c0d152f5410ecbaee3502b.png

9e173813ea8e0ec2f92525ff96e8c026.png
import 

bd.properties内容

452554fa52331fdf5f925c3ab9901a02.png

打印为

90cc5100ebf6b49a4048c4dc6fc4cbb6.png

Collections

void sort(List) //对 List 容器内的元素排序,按照升序进行排序。
void shuffle(List) //对 List 容器内的元素进行随机排列
void reverse(List) //对 List 容器内的元素进行逆续排列
void fill(List, Object) //用一个特定的对象重写整个 List 容器
int binarySearch(List, Object)//采用折半查找的方法查找特定对象
public 

如何解决HashMap线程不安全的问题:

1.使用Hashtable容器

2.static Map synchronizedMap(Map m) 使用Collecitons工具类中的

synchronizedMap,返回一个线程安全的map

3.juc包下的ConcurrentHashMap类 ---推荐使用

Thread

多线程: 多任务同时执行,多条路径执行,如果没有多任务,不需要使用多线程

线程和进程之间的区别:

1.进程包含1~n个线程

2.每个进程有自己的代码和运行空间

3.一系列线程共享继承的资源

4.进程是资源分配的最小单位,线程是cpu调度的最小单位

5.线程之间切换开销小,进程之间开销大.

多线程的开启方式
1.继承Thread类,重写run()方法,在方法中定义多线程的线程体
2.实现Runnable接口,重写run()方法,在方法中定义多线程的线程体 ---推荐
3.实现Callable接口,重写call()方法,在方法中定义多线程的线程体
多线程的状态问题
多线程的线程安全问题
public 

模仿12306买票。假如有100张票,肯定是多个窗口售卖,但只有100张。现在有三个人来买。

public 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值