Map 双列集合

单列集合Collection 和 双列集合 Map 都是只能保存对象

保存基本数据类型时 基本数据类型会被自动封装成包装类存储

Map双列集合的特点:

1. 是以 键值对 的形式来保存数据

key --- value

2. 键的值 唯一 (键不能重复  值可重复)

TreeMap : 排序 --- 指的是value这列

HashMap : 去重 --- 指的是key这列


HashMap

添加方法 put

public static void main(String[] args) {
    // map添加方法
	HashMap<String, Integer> map = new HashMap<>();
	map.put("赵虎", 28);
	map.put("张龙", 23);
	Integer n = map.put("赵虎", 23); // 接收的是覆盖的值
	map.put("王朝", 24);
	map.put("马汉", 26);
	System.out.println(n);  // 打印覆盖的值
	System.out.println(map); // 打印是无序的
}

Map的方法

HashMap<String, Integer> map = new HashMap<>();
map.put("彭前", 13);
map.put("彭后", 12);
map.put("彭左", 11);
map.put("彭右", 15);
boolean b1 = map.containsKey("彭中"); // 判断key是否包含
boolean b2 = map.containsValue(11); // 判断value是否包含
System.out.println(b1);
System.out.println(b2);
// 获取map中所有key的set集合
Set<String> keySet = map.keySet(); // 将所有key放入set集合
System.out.println(keySet); // [彭左, 彭后, 彭前, 彭右]
// 获取map中所有value值得collection集合
Collection<Integer> values = map.values(); // 将所有value值放入集合
System.out.println(values); 

删除方法

// 根据key 删除对应的 键值对
Integer remove = map.remove("彭前"); // 接收删除的value值
System.out.println(remove);
System.out.println(map);
// 清空Map
map.clear();
System.out.println(map);

注意: 自定义一个类 需要去重时与Set一样

        需要重写 hashcode 和 equals方法

Map遍历

map的keySet方法

public static void main(String[] args) {
	// 遍历Map
	HashMap<String, Integer> map = new HashMap<>();
	map.put("彭前", 13);
	map.put("彭后", 12);
	map.put("彭左", 11);
	map.put("彭右", 15);
	// map的keyset方法
	Set<String> keySet = map.keySet();
	System.out.println(keySet);
	// 增强for循环遍历
	for (String string : keySet) {
		Integer integer = map.get(string);
		System.out.print(string + "," + integer + " ");
	}
	System.out.println();
	// 迭代器遍历
	Iterator<String> iterator = keySet.iterator();
	while (iterator.hasNext()) {
		String key = iterator.next();
		Integer value = map.get(key);
		System.out.print(key + "," + value + " ");
	}
}
map的entrySet方法
// map的entrySet方法
Set<Entry<String,Integer>> entrySet = map.entrySet();
// 增强for循环
for (Entry<String, Integer> entry : entrySet) {
	System.out.println(entry);
}
// 迭代器遍历
Iterator<Entry<String, Integer>> iterator2 = entrySet.iterator();
while (iterator2.hasNext()) {
	Entry<String, Integer> next = iterator2.next();
	System.out.println(next);
}

例:    

 键盘输入字符串 统计字符串中每个字符出现的次数

 使用 map 集合完成

 

System.out.println("请输入字符串");
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
// 字符串转字符数组
char[] charArray = string.toCharArray();
		
HashMap<Character, Integer> map = new HashMap<>();
// 遍历数组
for (int i = 0; i < charArray.length; i++) {
	// 判断字符是否在map中存在
	if (!map.containsKey(charArray[i])) {
		// 不存在 value为1
		map.put(charArray[i], 1); // 自动装箱
	}else {
		// 已存在 通过key取出对应的value
		Integer value = map.get(charArray[i]);
		value = value + 1; // 自动拆箱
		// 把加好的value存进去
		map.put(charArray[i], value);
	}
}
System.out.println(map);

同LinkedHashSet一样 

linkedHashMap是有序的

TreeMap

使用TreeMap 进行排序(同TreeSet)

Collections类 集合的工具类(静态方法)

ArrayList<Integer> list = new ArrayList<>();  // List 有序

随机打乱集合顺序的方法 (洗牌)

Collections.shuffle(list)

反转

Collections.reverse(list);

排序

Collections.sort(list); // 升序

二分查找 (有序的数组中)

int index = Collections.binarySearch(list, 25);


注意:

使用Collections方法时 和 自定义的类排序时 

都需要 实现comparable接口 或者 创建比较类 写排序规则



洗牌  嵌套Map 待续-------



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值