一.Map
Map是双列集合
1.是以键值对的形式保存数据的 key value
2.键的值 唯一
HashSet和HashMap的关系:
HashSet是依赖Map来存储数据的
Set在保存数据的时候 实际上就是向Map中的key这一列中存数据
(HashMap:去重 指的是key这列
TreeMap:排序 指的是key这列)
Map的一些常见方法:
1.put方法 添加
(返回的是被覆盖的之前的value值)
2.判断包含(判断的是key)返回值是布尔类型
containsKey()
3.判断包含value(判断的是value)返回值是布尔类型
containsValue()
4.获取Map中所有Key的Set集合
Set<String> keySet = map.keySet();
5.获取Map中所有Value的collection集合
Collection<Integer> v1 = map.values();
6.删除 根据Key删除整个键值对
map.remove(key);
7.HashMap的去重:
和Set集合一样 重写HashCode和equals方法去重
8.遍历Map
HashMap<String, Integer> map = new HashMap<>();
map.put("大娃", 10);
map.put("二娃", 11);
map.put("三娃", 12);
map.put("四娃", 13);
Set<String> keySet = map.keySet();
for (String string : keySet) {
Integer integer = map.get(string);
System.out.println(string + "=" +integer);
}
9.Entry接口
Entry接口是Map接口中的内部接口
Entry中保存的是键值对对象 相当于把map中的key和value封装成了一个对象
HashMap<String, Integer> map = new HashMap<>();
map.put("大娃", 10);
map.put("二娃", 11);
map.put("三娃", 12);
map.put("四娃", 13);
//利用entrySet遍历集合(迭代器/增强for循环)
Set<Entry<String, Integer>> entrySet = map.entrySet();
//迭代器
Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Entry<String, Integer> next = iterator.next();
System.out.println(next);
}
//增强for循环
for (Entry<String, Integer> entry : entrySet) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + "=" + value);
}
}
二.Collections类
collections类是集合的工具类
方法:
1.随机打乱集合顺序:(相当于洗牌)
Collections.shuffle(list);
2.反转
Collections.reverse(list);
3.排序
Collections.sort(list);
4.二分查找
int binarySearch = Collections.binarySearch(list, 20);
example:
模拟斗地主(用Map集合)
1.洗牌
2.发牌
3.看牌
public static void main(String[] args) {
String[] s1 = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] s2 = {"♠️","♥️","♣️","♦️"};
HashMap<Integer, String> hashMap = new HashMap<>();
int num = 0;
for (int i = 0; i < s1.length; i++) {
for (int j = 0; j < s2.length; j++) {
String str = s2[j] + s1[i];
hashMap.put(num , str);
num++;
}
}
hashMap.put(52,"小王");
hashMap.put(53,"大王");
System.out.println(hashMap);
ArrayList<Integer> arrayList = new ArrayList<>();
for (int i = 0; i < hashMap.size(); i++) {
arrayList.add(i);
}
Collections.shuffle(arrayList);
System.out.println(arrayList);
TreeSet<Integer> treeSet1 = new TreeSet<>();
TreeSet<Integer> treeSet2 = new TreeSet<>();
TreeSet<Integer> treeSet3 = new TreeSet<>();
TreeSet<Integer> treeSet4 = new TreeSet<>();
for (int i = 0; i < arrayList.size(); i++) {
int pai = arrayList.get(i);
if (i >= arrayList.size() - 3) {
treeSet4.add(pai);
}
if (i % 3 == 0 && i < arrayList.size() - 3) {
treeSet1.add(pai);
}
if (i % 3 == 1 && i < arrayList.size() - 3) {
treeSet2.add(pai);
}
if (i % 3 == 2 && i < arrayList.size() - 3) {
treeSet3.add(pai);
}
}
System.out.println(treeSet1);
System.out.println(treeSet2);
System.out.println(treeSet3);
System.out.println(treeSet4);
kanPai(hashMap, treeSet1);
kanPai(hashMap, treeSet2);
kanPai(hashMap, treeSet3);
kanPai(hashMap, treeSet4);
}
//看牌的方法
private static void kanPai(HashMap<Integer, String> map,TreeSet<Integer> set) {
for (Integer integer : set) {
String string = map.get(integer);
System.out.print(string + " ");
}
System.out.println();
}
三.总结
一.
HashMap和Hshtable的区别?
1.HashMap JDK1.2
线程不安全的
可以保存空值null
2. Hashtable JDK1.0
线程安全的
不能保存空值null
二.
ArrayList和linkedList还有Vector的区别?
ArrayList
线程不安全的
查找快 增删慢
linkedList
线程不安全的
查找慢 增删快
Vector
线程安全
三.
HashSet和TreeSet还有linkedHashSet的区别?
HashSet 可以去重
线程不安全的
TreeSet 可以排序
线程不安全的
linkedHashSet 有序(怎么存怎么取)
线程不安全的