特点: 以键值对形式保存数据 健保持唯一 key – value
其中有两个实现类 分别为 HashSet 和 HasehMap 它们两个底层都是一套算法实现
其中Set 底层是依赖 Map 来实现的 添加到HashSet 中的值 实际上是添加到 HasehMap 中健的位置
代码示例:
HashMap map = new HashMap<>();
map.put("振北", 19);
map.put("振东", 18);
map.put("振西", 16);
map.put("振南", 16);
// 是否包含Key
// 是否包含Value
boolean containsKey = map.containsKey("振南");
boolean containsValue = map.containsValue(16);
// 通过Key找Value
Integer integer = map.get("振北");
Integer integer1 = map.get("振中");
// 获取所有Key的Set集合
Set keySet = map.keySet();
// 获取所有Value的集合
Collection values = map.values();
//System.out.println(values);
// 通过key删除整个 键值对
Integer remove = map.remove("振中");
//System.out.println(remove);
// 情况map
map.clear();
System.out.println(keySet);
System.out.println(integer1);
System.out.println(integer);
System.out.println(containsValue);
System.out.println(containsKey);
System.out.println(map);
如何遍历map集合?
HashMap<String, Integer> map = new HashMap<>();
map.put("振北", 19);
map.put("振东", 18);
map.put("振西", 17);
map.put("振南", 16);
// 通过keySet遍历
Set<String> keySet = map.keySet();
// 第一种使用 获取迭代器
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
Integer integer = map.get(next);
System.out.println(next + " " +integer);
}
// 第二种使用增强For循环遍历
Set<String> keySet = map.keySet();
for (String string : keySet) {
Integer integer = map.get(string);
System.out.println(string + " " + integer);
}
例题:
键盘输入字符串 统计字符串中每个字符出现的次数
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
char[] charArray = string.toCharArray();
HashMap map = new HashMap<>();
Set> entrySet = map.entrySet();
for (int i = 0; i < charArray.length; i++) {
// 将每一个字符存在map中
// 如果不存在
if (!map.containsKey(charArray[i])) {
map.put(charArray[i], 1);
}else { // 如果存在
Integer integer = map.get(charArray[i]);
integer = integer + 1;
map.put(charArray[i], integer);
}
}System.out.println(map);
线程不安全 有序(怎么存怎么取)
添加方法示例:
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
map.put("james", 19);
map.put("Tom", 18);
map.put("Jerry", 17);
map.put("Mike", 20);
System.out.println(map);
代码示例:
ArrayList<Integer> list = new ArrayList<>();
list.add(12);
list.add(11);
list.add(13);
list.add(15);
// 随机交换集合中的位置(洗牌)
//Collections.shuffle(list);
// 排序
// Collections.sort(list);
//二分查找
//int binarySearch = Collections.binarySearch(list, 13);
//System.out.println(binarySearch);
Collections.reverse(list);
System.out.println(list);
使用map 来模拟斗地主(洗牌 发牌 看牌)
public class Demo04 {
public static void main(String[] args) {
TreeMap map = new TreeMap<>();
//保存索引
ArrayList list = new ArrayList<>();
// 创建索引
int index = 0;
String[] s1 = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] s2 = {"红桃","黑桃","梅花","方块"};
for (int i = 0; i < s1.length; i++) {
for (int j = 0; j < s2.length; j++) {
String pokerString = s2[j] + s1[i];
map.put(index, pokerString);
index++;
list.add(index);
}
}
map.put(index, "小王");
map.put(++index, "大王");
list.add(index);
//System.out.println(list);
Collections.shuffle(list);
TreeSet james = new TreeSet<>();
TreeSet Tom = new TreeSet<>();
TreeSet Jerry = new TreeSet<>();
TreeSet set3 = new TreeSet<>();
for (int i = 0; i < list.size(); i++) {
Integer integer = list.get(i);
if (i >= list.size() -3) {
set3.add(integer);
System.out.println();
}else if (i % 3 ==0) {
// 给第一个人发牌
james.add(integer);
} else if (i % 3 == 1) {
Tom.add(integer);
}else if (i % 3 ==2) {
Jerry.add(integer);
}
}
watchPokers(map, james);
watchPokers(map, Tom);
watchPokers(map, Jerry);
watchPokers(map, set3);
}
public static void watchPokers(TreeMap map,TreeSet set) {
// 遍历索引的set 取出每一个索引 再去map中找对应的牌
for (Integer integer : set) {
String string = map.get(integer);
System.out.print(string + " ");
}
System.out.println();
}
}