一、Map集合

  1. map集合介绍

Collection集合的特点:

集合中存储的所有元素都是单一元素,元素和元素之间没有必然的关系。因此我们把Collection集合也称为单列集合。

Map集合:

Map集合中保存的是一组(一对)数据。数据之间存在着一定的对应关系。Map集合就可以将数据的对应关系维护起来。当这样的数据存储在Map集合中,我们取出的时候,就可以根据这种对应关系获取到其中这组数据。

public interface Map<K,V>

    将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

    Map集合中的key是唯一的。每个key都有一个value值和其一一对应。

  2.  Map集合中的方法

    2.1 添加方法

    

       

通过演示Map接口中的Map方法,发现put方法可以将指定的一组数据保存到集合中。

但是put方法有返回值:

如果调用put方法的时候,在保存的key和value值时,key在集合中不存在,这时相当于给集合中保存了一组新的数据。这时put方法得到的null。如果保存的这组数据中的key在集合中已经存在,这时会用当前的value值覆盖掉key对应的原来的value值,并返回被覆盖的那个value值。

总结:put方法可以将一组对象保存到Map中,返回的当前key对应的原始的value值。如果key是第一次出现返回的null。如果不是第一次,就会修改原始的value值。返回原来的value值

    2.2 删除方法

  

    2.3 获取方法

根据指定的key获取对应的value值。如果给出的key在集合中没有,返回null。

1 /*
2 * Map集合中的获取方法
3 */
4 public class MapDemo3 {
5 public static void main(String[] args) {
6
7 //创建集合对象
8 Map map = new HashMap();
9
10 map.put("aa", "bb");
11 map.put("cc", "dd");
12 map.put("ee", "fff");
13
14 //打印
15 System.out.println(map);
16
17 Object o = map.get("aa");
18 System.out.println(o);
19 System.out.println(map);
20 }
21 }

    2.4 判断方法

1 /*
2 * 演示Map集合中的判断方法
3 */
4 public class MapDemo4 {
5 public static void main(String[] args) {
6 // 创建集合对象
7 Map map = new HashMap();
8
9 map.put("aa", "bb");
10 map.put("cc", "dd");
11 map.put("ee", "fff");
12
13 //判断集合中是否包含指定的key
14 System.out.println(map.containsKey("aa"));
15 System.out.println(map.containsValue("bb"));
16 System.out.println(map.isEmpty());
17 }
18 }

  3.Map集合的遍历

    3.1 Map集合介绍

Map集合中保存的key-value一组数据。它们不能直接使用Iterator进行遍历。如果需要对Map集合进行遍历,这时必须先将Map集合转成Collection下的某个集合容器,然后再使用Iterator进行遍历。

Map集合的遍历有两种方式:

1、  获取Map中的所有key,然后将这些key保存到Set集合中。这时就可以使用Iterator进行遍历,进而就能得到每个的单独的key值,再使用Map中的get(key)方法得到key对应的value值。

2、  获取到Map中的key和value这组数据,再封装成一个新的对象。

    3.2 keySet遍历

1 /*
2 * 使用Map集合中的keySet方法遍历Map集合
3 */
4 public class KetSetDemo {
5 public static void main(String[] args) {
6
7 //创建集合对象
8 Map map = new HashMap();
9
10 map.put("aa", "bb");
11 map.put("cc", "dd");
12 map.put("ee", "ff");
13
14 //获取到Map中的所有key组成的Set集合
15 Set set = map.keySet();
16
17 //遍历Set集合
18 for( Iterator it = set.iterator() ; it.hasNext() ; ){
19 //获取到Set集合中的某个key值
20 Object key = it.next();
21 //调用Map集合中的get方法,得到key对应的value值
22 Object value = map.get(key);
23 System.out.println(key+"...."+value);
24 }
25 }

  3.3 entrySet遍历

  

1 /*
2 * 使用Map集合中的 entrySet 方法遍历Map集合
3 */
4 public class EntrySetDemo {
5 public static void main(String[] args) {
6 // 创建集合对象
7 Map map = new HashMap();
8
9 map.put("aa", "bb");
10 map.put("cc", "dd");
11 map.put("ee", "ff");
12
13 // 获取到所有key和value组成的Entry对象,保存到Set集合中
14 Set set = map.entrySet();
15
16 // 遍历Set集合
17 for (Iterator it = set.iterator(); it.hasNext();) {
18
19 //已经获取到key和value组成的Entry对象
20 Object obj = it.next();
21 //由于取出的数据被提升成Object类型,这时需要向下转型
22 Entry entry = (Entry) obj;
23 System.out.println(entry.getKey()+"...."+entry.getValue());
24 }
25 }
26 }

就业班中学习JavaWEB中的JSP中的JSTL技术时,其中有foreach的标签,遍历Map集合的时候,使用的entrySet。

    3.4 values方法

获取到的Map集合中的所有value值组成的Collection集合。

1 /*
2 * 演示Map集合中的values方法
3 */
4 public class ValuesDemo {
5 public static void main(String[] args) {
6
7 //创建集合对象
8 Map map = new HashMap();
9
10 map.put("aa", "bb");
11 map.put("cc", "dd");
12 map.put("ee", "ff");
13
14 //获取到Map集合中的所有value值
15 Collection coll = map.values();
16
17 //遍历集合
18 for(Iterator it = coll.iterator() ; it.hasNext() ;){
19 System.out.println(it.next());
20 }
21 }
22 }

  4.  HashMap演示

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

HashMap是Map接口的实现类,它的底层使用的哈希表。哈希表作用在HashMap集合的key上。

当使用自定义对象作为HashMap集合的key值时,这个自定义对象所属的类需要复写Object类中的hashCode和equals方法。

1 /*
2 * 演示HashMap,使用自定义对象作为Map的key值
3 */
4 public class HashMapDemo {
5 public static void main(String[] args) {
6
7 //创建集合对象
8 HashMap map = new HashMap();
9
10 map.put(new Person("张三",23), "上海");
11 map.put(new Person("张三",23), "上海");
12 map.put(new Person("李四",33), "北京");
13 map.put(new Person("王五",39), "东莞");
14
15 //获取所有的key组成的set集合
16 Set set = map.keySet();
17
18 //遍历
19 for( Iterator it = set.iterator();it.hasNext() ; ){
20 Object key = it.next();
21 //获取value值
22 Object value = map.get(key);
23 System.out.println(key+"...."+value);
24 }
25 }
26 }

  5. TreeMap演示

基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

TreeMap的底层是二叉树结构。二叉树作用在集合的key上。TreeMap集合可以对保存在其中的元素进行排序。

如果将对象保存在TreeMap集合中,key上的这个对象应该具备比较的功能,key上的对象所属的类应该实现Comparable接口。或者是在创建TreeMap的时候,传递一个Comparator对象。

1 /*
2 * 使用自定义对象作为TreeMap的key值
3 */
4 public class TreeMapDemo {
5 public static void main(String[] args) {
6
7 //创建对象
8 TreeMap map = new TreeMap( );
9
10 map.put(new Person("张三",23), "上海");
11 map.put(new Person("张三",23), "上海");
12 map.put(new Person("李四",33), "北京");
13 map.put(new Person("王五",33), "东莞");
14
15 //使用entrySet方法进行遍历
16 Set set = map.entrySet();
17
18 for( Iterator it = set.iterator(); it.hasNext() ; ){
19 Object obj = it.next();
20 Entry entry = (Entry) obj;
21 System.out.println(entry.getKey()+"....."+entry.getValue());
22 }
23 }
24 }

  6.  Map练习:

1 /*
2 * 需求:统计字符串中每个字符的次数。
3 *
4 * 分析:
5 * 字符串数据是不确定的数据。其中的字符是什么也不知道,
6 * 但是我们可以只要这个字符出现过,就需要给出一个计数器统计这个字符的次数
7 *
8 * 遍历字符串,取出每个字符,然后判断它是否已经在统计的计数器中出现过,
9 * 如果出现过,就给这个计数器+1,如果没有出现过,说明这个字符是第一次出现
10 * 就给这个字符的计数器赋值为1.
11 *
12 * 统计字符的次数:
13 * 字符 次数
14 * 使用从字符串中取出的字符作为Map的key值,次数作为Map的value值
15 * 只要从字符串中取出一个字符,就判断当前这个字符在Map的key中是否存在,
16 * 如果存在,就取出对应的value值+1,再保存到Map中。如果不存在,就说明
17 * 字符是第一次出现,直接给value值为1,保存到Map中。
18 *
19 */
20 public class MapTest {
21 public static void main(String[] args) {
22
23 String s = "djfjsdl使用从字符串中取出的字符作为Map的key值,次数作为Map的value值";
24
25 //需要定义一个集合
26 Map map = new HashMap();
27
28 //遍历字符串
29 for(int i = 0 ; i < s.length() ; i++ ){
30 //取出字符
31 char ch = s.charAt(i);
32 //判断当前的字符在Map中是否存在
33 if( map.containsKey(ch) ){
34 //判断成立说明当前从字符串中取出的字符,已经出现过
35 Integer value = (Integer) map.get(ch);
36 //给value+1,再保存到Map中
37 value = value + 1;
38 map.put(ch, value);
39 }else{
40 //判断不成立,说明当前的字符是第一次出现
41 map.put(ch, 1);
42 }
43 }
44
45 //遍历Map集合,取出每个字符的次数
46 Set set = map.keySet();
47 for( Iterator it = set.iterator() ; it.hasNext() ; ){
48 Object key = it.next();
49 Object value = map.get(key);
50 System.out.println("'"+key+"'出现的次数是:"+value);
51 }
52 }
53 }

  7.  Hashtable演示

此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。

Hashtable集合它属于Map集合,但是是JDK1.0时期的,底层是哈希表,和HashMap功能一致。它是安全的。

1 /*
2 * 演示古老的双列集合Hashtable
3 */
4 public class HashtableDemo {
5 public static void main(String[] args) {
6
7 //创建集合对象
8 Hashtable table = new Hashtable();
9
10 table.put("aa","bb");
11 table.put("ccc","ddd");
12 table.put("ccc","ddd");
13 table.put("eee","fff");
14
15 //遍历
16 Enumeration en = table.keys();
17 while( en.hasMoreElements() ){
18 Object key = en.nextElement();
19 Object value = table.get(key);
20 System.out.println(key+"...."+value);
21 }
22 }
23 }

2.  工具类介绍

工具类:在JDK中提供大量的类。但是这些类都有对用的功能。可是某些的功能并不能满足实际的所有需求,于是针对这些类有提供的其他的类,处于辅助其他类的这些类被称为工具类。

JDK中的工具类一般都以s结尾。并且工具类中的所有方法全部是静态的。

  1. Collections工具类

此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。

Collections:中的方法都是静态的,可以操作集合。

反转List集合中的元素。

反转比较器。

结论:在使用集合的时候,如果发现需要使用集合的某个功能,但是自身没有这时就需要考虑使用Collections中的方法。

    2. Arrays工具类、

Arrays工具类中提供的大量可以操作数组的方法(折半查找、复制、排序、比较等)。

asList:它的功能是将一个数组转成List集合。目的是希望通过使用集合的方法来操作数组。

1 /*
2 * 演示Arrays中的方法,将数组转成集合
3 */
4 public class ArraysDemo {
5 public static void main(String[] args) {
6
7 //Integer[] arr = {11,22,33,44,55,66,77,88};
8 int[] arr = {11,22,33,44,55,66,77,88};
9
10 //将数组转成集合
11 List list = Arrays.asList(arr);
12
13 System.out.println(list);
14 //求最大值
15 Object max = Collections.max(list);
16 System.out.println(max);
17 Collections.reverse(list);
18 System.out.println(list);
19
20 }
21 }

结论:数组转成集合的时候,只能将引用类型的数组中空间中的每个对象转后存储到集合中。基本类型数组作为一个整体存储在集合中。

集合转成数组:

直接使用Collection接口中的toArray方法完成。

JAVA基础--JAVA API集合框架的更多相关文章

  1. Java基础---泛型、集合框架工具类:collections和Arrays

    第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...

  2. Java基础知识:集合框架

    *本文是最近学习到的知识的记录以及分享,算不上原创. *参考文献见链接. 目录 集合框架 Collection接口 Map接口 集合的工具类 这篇文章只大致回顾一下Java的总体框架. 集合框架 ht ...

  3. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  4. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  5. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  6. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  7. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  8. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  9. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

  10. Java基础-Java数据类型

    Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...

随机推荐

  1. sql 用表组织数据

    一.四种完整性约束 1.实体完整性约束:不允许出现相同记录的数据 2.域完整性约束:对字段进行限定,不得插入不符合限定的数据 3.引用完整性:表与表之间的关系 4.自定义完整性约束:开发人员自己设定对 ...

  2. 两篇将rf和boosting方法用在搜索排序上的paper

    在网上看到关于排序学习的早期文章,这两篇文章大致都使用了Random Forest和Boosting方法. 一.paper 1.Web-Search Ranking with Initialized ...

  3. jQuery事件之解绑事件

    语法: $(selector).unbind([eventType][,handler(eventObject)]); 返回值:jQuery 参数解释: eventTypey:类型:String以后包 ...

  4. Minimal Labels

    Minimal Labels 这个题需要用到拓扑排序的思维,但是这个题还有一个条件--字典序最小,因此可以用一个递增的优先队列来维护,每找到一个入度为 0 的点就把它 push 进去因而每一次判断的点 ...

  5. Vue_(组件通讯)动态组件

    动态组件 传送门 在一个元素上挂载多个组件,根据不同状态进行切换的时候,可以使用动态组件 动态组件的使用:需要使用内置组件<component></component>,根据 ...

  6. CTF MD5之守株待兔,你需要找到和系统锁匹配的钥匙

    这是提示 从系统锁下手,通过get方式key字段提交答案,直到您的钥匙与系统锁相等则成功. 点开链接可以发现有两串字符,而且系统的秘钥是一直在变化的 题目中已经给了MD5加密,那么用MD5解密发现您的 ...

  7. 三、Reids(高性能)key-value服务器知识整合

    一.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. 知识链接:https://www.runoob.com/redis/redis-backup.html ht ...

  8. truncate at 255 characters with xlsx files(OLEDB方式读取Excel丢失数据、字符串截断的原因和解决方法)

    The TypeGuessRows setting is supported by ACE. Note the version numbers in the key may change depend ...

  9. 【编程漫谈】用JAVA画多边形

    一门语言只要带图形库就可以编程画图了,用JAVA画图有两种方式,一是在内存中画好然后生成图片,就可以看到画图的效果了.另一个就是在窗口界面上直接画,可以实时看到程序的运行效果.刚开始学编程的时候,我加 ...

  10. Back键和Menu键程序退出弹窗以及按钮退出程序弹窗的实现

    MainActivity.java package com.loaderman.backmenudemo; import android.content.Intent; import android. ...