IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Day_20 Map -> 正文阅读

[数据结构与算法]Day_20 Map

1.set

1.1散列表

散列表:可以理解为数组保存元素是个链表
??
??散列表中保存的是键值对(K和v)
??
?hashCode:hash算法,是把不定长数据改变为定长数据,是一种安全的加密算法,但不保证唯一
?? ? ? 同一个对象生成多次hash值,那么值一定是相同的,
?? ? ? 不同对象也有可能生成相同的hash值
?? ? ??
?? ? ? 添加过程:1.先调用添加的K,调用hashCode生成hash值
?? ? ? 2.根据hash值计算数组下标
?? ? ? 3.判断数组中该下标对应的位置是否有元素
?? ? ? 3.1 如果没有保存数据,就把该对象放到对应的下标中
?? ? ? 3.2如果保存了数据.此时调用添加的K的equals方法,和数组中该下标对应的所有数据key进行比较
?? ? ?3.3如果和数组下标对应的链表中 的数据 都不相等,就把该数据添加到对应的链表中
?? ? ? 3.4如果和链表中的数据一致了,则key不添加,把value值替換掉(用新的替換原來的)
?? ? ? 4.java1.8新改动,如果该链表中,节点个数大于7,则该链表被转换为红黑树
?? ? ??
?? ? ? 在java中没有散列表这个说法,只是把散列表封装为HashMap和HashTable,并且HashTable已经过时了
?? ? ? ? ? ? ? ? ? 并且HashMap的默认容量为16
?? ? ? HashSet 底层就是一个Hashmap,并且只是Map的key部分,没有value

public class Collection_01{
public static void main(String[]args){

HashSet<String> set=new HashSet<String>();
}
}

?

?

?1.2hashSet使用

?

?2.Map

2.1继承体系

2.2map特性

??Map:无序 ,key不可重复,value值可重复
??
??Map和Collection不一样,但是操作基本上是一样的
??
??集合保存单个对象,而map保存键值对映射关系
??2.3常用方法

?2.4HashMap

public static void main(String[]args){
	//创建map
	Map<String,Integer>map=new HashMap<String,Integer>();
	map.put("a",1);
	map.put("a",2);
	map.put("A",21);
	map.put("'A'",22);
	map.put("65",122);
	//个数1
	System.out.println(map.size());
	//根据Key获取value,2  因为key重复,value替换
	System.out.println(map.get("a"));
	// 是否包含某个key
			System.out.println(map.containsKey("65"));
			// 是否包含某个value
			System.out.println(map.containsValue(2));
			//根据key删除该映射关系(K和v都删除,在链表中把该节点删除)
			map.remove("a");
			//元素个数
			System.out.println(map.size());
			
			
			//map不能直接遍历
			//获取所有的key
			Set<String> sets=map.keySet();
			for(String key:sets){
				System.out.println(key+":"+map.get(key));
			}
			//获取所有的value
			Collection values=map.keySet();
			for(Object object:sets){
				System.out.println(object);
			}
			//将map转化为set,并把key和value封装到了entry类对象中,然后把entry类对象保存到set中即可
			Set<Entry<String,Integer>>entries=map.entrySet();
			for(Entry<String,Integer>entry:entries){
				//A=21
				System.out.println(entry);
				//getKey是获取key,getValue是获取value
				System.out.println(entry.getKey()+"->"+entry.getValue());
				
			}
} 

2.5Properties

Properties:key和value强制要求必须是字符串

public static void main(String[] args) {
	Properties p=new Properties();
	//添加数据
	p.setProperty=("driver","mysql");
	p.setProperty=("username","root");
	//获取数据
	System.out.println(p.getProperty("driver"));
	System.out.println(p.getProperty("username"));
	//不存在的key   得到null
	System.out.println(p.getProperty("qweqw"));
	//有个方法重载,第二个参数为默认值,假如根据key找不到数据的时候,返回该默认值,而不是null
	//并不会把该键值对加进去
	System.out.println(p.getProperty("qweqw","默认值"));
}

2.6TreeMap

TreeMap:保存的元素可以按照一定的规则进行排序
??排序:
??1.要添加的元素,实现了Comparable接口
??2.编写比较器类,实现Comparator接口
??treeMap在添加的时候,会自动调用key对象的compareTo方法,是用在key进行比较

public static void main(String[] args) {
	TreeMap<Integer, String> map = new TreeMap<Integer, String>
			(new Comparator<Integer>() {
		@Override
		public int compare(Integer o1, Integer o2) {
			return o2-o1;
		}
			});	
	map.put(1,"a");
	map.put(2, "a");
	map.put(12, "a");
	map.put(11, "a");
	Set set=map.entrySet();
	for(Object object:set){
		System.out.println(object);
	}
}
}

2.7面试题

Map转list并以value排序

?Map转换为List储存,并且以value进行排序
??
?? 因为Map没有办法以value排序,因为treemap中只是按照key排序的,所以想要以value排序,需要转换为list'
?

public static void main(String[] args) {
		//创建一个map对象
		Map<String,Integer>map=new HashMap<String,Integer>();
		map.put("a",1);
		map.put("bbb",2);
		map.put("bcd",1);
		map.put("a1",12);
		
		//把K和V封装到entry中,然后保存到set中
		Set<Entry<String,Integer>> set=map.entrySet();
		//set转换成list
		List<Entry<String,Integer>>list=new ArrayList<Map.Entry<String,Integer>>(set);
		//更改排序
		Collections.sort(list,new Comparator<Entry<String,Integer>>(){
			@Override
			public int compare(Entry<String, Integer> o1,
					Entry<String, Integer> o2) {
				// 按照value值进行比较
				return o1.getValue() - o2.getValue();
			}
		});
		System.out.println(list);
		}

??

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:25:59  更:2021-10-26 12:27:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:42:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码