单列集合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 待续-------