文档章节

JAVA基础--JAVA API集合框架

architect刘源源
 architect刘源源
发布于 2018/05/09 16:47
字数 2964
阅读 30
收藏 1

一、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     }
26 }

复制代码

 

   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方法完成。

© 著作权归作者所有

architect刘源源

architect刘源源

粉丝 164
博文 518
码字总数 922877
作品 0
浦东
程序员
私信 提问
你必须掌握的 21 个 Java 核心技术!(干货)

点击上方“java进阶架构师”,选择右上角“置顶公众号” 20大进阶架构专题每日送达 51闲来无事,师长一向不(没)喜(有)欢(钱)凑热闹,倒不如趁着这时候复盘复盘。而写这篇文章的目的是想...

Java进阶架构师
05/03
0
0
Java面试无非也就这几个知识点,大家是否都掌握了

Java语言的关键点 掌握静态方法和属性 重视接口 学好集合框架 例外捕捉 多线程需要理解机理(多线程原理和多线程安全) 了解网络编程 不需要精通,掌握以下知识点,面试基本没有问题。 这里没有...

土豆宝
2016/08/22
9.4K
37
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
你必须掌握的 21 个 Java 核心技术!

你必须掌握的 21 个 Java 核心技术! Java技术栈 2018-10-29 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java。 ...

浮躁的码农
04/15
0
0
给Java新手的一些建议——Java知识点归纳(Java基础部分)

  写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,...

Java工程师-10
2017/05/24
509
2

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 带这么多钱,你要泡我吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :白给?#今日歌曲推荐# 分享Lana Del Rey的单曲《Yayo》: 《Yayo》- Lana Del Rey 手机党少年们想听歌,请使劲儿戳(这里) @红薯...

小小编辑
27分钟前
85
5
搭建tftp服务

前言: 最近整理一些以前的学习笔记。 过去都是存储在本地,此次传到网络留待备用。 TFTP服务: TFTP:Trivial File Transfer Protocol 不重要文件传输协议 主要用来传送小文件,不支持认证和...

迷失De挣扎
今天
4
0
rest 的理解

rest:表现层状态转移。 什么是restful协议?https://en.wikipedia.org/wiki/Representational_state_transfer 使用restful的好处。 Rest是一种体系结构样式,他定义了一组用于创建web服务的...

xiaoxiao_go
今天
5
0
聊聊spring cloud的CachingSpringLoadBalancerFactory

序 本文主要研究一下spring cloud的CachingSpringLoadBalancerFactory CachingSpringLoadBalancerFactory spring-cloud-openfeign-core-2.2.0.M1-sources.jar!/org/springframework/cloud/o......

go4it
昨天
8
0
一篇文章搞定——JDK8中新增的StampedLock

一、StampedLock类简介 StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁、写锁的访问,同时使读写锁之间可以互相转换,更细粒度控...

须臾之余
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部