java基础复习(十六)

集合框架
Map集合
Map<K,V>
K- 此映射所维护的键的类型
V- 映射值得类型

一个映射不能包含重复的键
每个键最多只能 映射到一个值

Map接口和Collection接口不同

  • Map是双列的,Collection是单列的
  • Map的键唯一,Collection的子体系Set是唯一

HashSet依赖于HashMap

存取不能保证有序

Map<String,Integer> map = new HashMap<>();
Integer i1 = map.put("张三",23);//null
Integer i2 = map.put("张三",24);//23
Integer i3 = map.put("张三",25);//24
Integer i4 = map.put("张三",26);//25
Integer i5 = map.put("张三",27);//26

Integer value = map.remove("张三");//27

通过查看Map集合的API发现没有iterator方法,那么双列集合如何迭代呢?
Map集合是不能直接迭代的

Map集合的遍历第一种迭代之键找值

//根据键获取值
//获取所有键
Set<String> keySet = map.keySet();
Inerator<String> it = keySet.iterator();
while(it.hasNext()){判断集合中是否还有元素
    String key = it.next();//获取每个键
    Integer value = map.get(key);//根据键获取值
}

能用迭代器的情况下就能用增强for
增强for循环遍历

for(String key: map.keySet){

}

Map集合的第二种迭代,根据键值对对象获取键和值
把双列集合的键值对
变成单列集合的键值对对象
然后遍历这个集合获取每一个键值对对象
根据键值对对象获取键和值

  1. 获取键值对对象
  2. 当然也可以使用迭代器和增强for循环

jiekou.jiekou的时候表示 其中有内部的接口

第二种方式比较好

在Map的key位置存放对象
对象中如果不重写hashCode()方法,那么也就不会调用equals方法

LinkedHashMap
有顺序的HashMap

TreeMap集合
需要实现Comparable
和treeSet是一个意思

需求:统计字符串中每个字符出现的次数

分析:
1.定义个需要被统计的字符的字符串
2.将字符串转换成字符数组
3.定义双列集合,存储字符串中字符以及字符出现的次数
4.遍历字符数组获取每一个字符,并将字符存储在双列集合中
5.存储过程中要做判断
6.如果集合中要判断,如果集合中不包含这个键,就将该字符当作键,值为1存储,如果集合中包含这个键就将值加1存储
7.打印双列集合获取字符出现的次数

String s = "adfaddfasdfdfasfas";
char arr[] = s.toCharArray();
//没有特定的要求就是用HashMap
HashMap<Character,Integer> hm = new HashMap();
for(char c : arr){
    // if(!hm.containsKey(c)) {
    //     hm.put(c,1);
    // }else{
    //     hm.put(c.hm.get(c) + 1);
    // }
    hm.put(c,!hm.containsKey(c) ? : hm.get(c) + 1);
}

for(Character key : hm.keySet()){
    System.out.println(key+"="+hm.get(key));
}

集合框架嵌套之HashMap

HashMap和Hashtable【jdk1.0的时候命名还不是很规范】

和Vector差不多啦

HashMap和Hashtable的区别
面试占面试题的60%

共同点:底层都是哈希算法,都是双列集合
区别:
HashMap是线程不安全的,效率高,JDK1.2版本
Hashtable是线程安全的,效率相对低,JDK1.0版本的

HashMap可以存储null键和null值
Hashtable不可以存储null键和null值

NullPointException

Collections工具类的概述和常见方法讲解

斗地主
1.创建一副扑克牌,一个集合对象,将扑克牌存储进去。
2.洗牌
3.发牌
4.看牌

泛型固定下边界

集合体系
Collection

List(存取有序、有索引、可以重复)
* ArrayList[底层是数组实现的,线程不安全,查找和修改快,增和闪比较慢]
* LinkedList[
底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢]
* Vector[底层是数组实现的,线程安全的,无论增删改查都慢]

如果查找和修改多用ArrayList
如果增和删多,用LinkedList
如果都多,用ArrayList
Set(存取无需、无索引、不可以重复)
* HashSet
底层是哈希算法实现
* LinkedHashSet
底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
* TreeSet
底层是二叉树算法实现

一般在开发的时侯不需要对存储的元素排序,所以在开发的时候大多用HashSet
TreeSet在面试的时候比较多,问你有几种排序方式和几种排序方式的区别
HashSet的效率比较高

Map
    HashMap[底层是哈希算法,针对键]
        LinkedHashMap
        底层是链表,针对键
    TreeMap
         底层是二叉树算法,针对键
开发中用HashMap比较多

本文链接:

https://heyzen.club/index.php/J/259.html
1 + 9 =
快来做第一个评论的人吧~