JAVA基础--JAVA API集合框架
一、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集合框架的更多相关文章
- Java基础---泛型、集合框架工具类:collections和Arrays
第一讲 泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...
- Java基础知识:集合框架
*本文是最近学习到的知识的记录以及分享,算不上原创. *参考文献见链接. 目录 集合框架 Collection接口 Map接口 集合的工具类 这篇文章只大致回顾一下Java的总体框架. 集合框架 ht ...
- Java基础-Java中23种设计模式之常用的设计模式
Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...
- Java基础-JAVA中常见的数据结构介绍
Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.
- Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)
Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...
- Java基础-Java中的并法库之线程池技术
Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.
- Java基础-Java数据类型
Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...
随机推荐
- HDU4135 Co-prime
题目链接:Click here Solution: 简单容斥,我们先把\(N\)分解质因数,我们知道\(1\sim x\)里能整除\(i\)的数的个数为\(\lfloor \frac{x}{i} \r ...
- 洛谷比赛 U4858 sum
U4858 sum 题目提供者666sb666 最新讨论 题目背景 定义一个序列的价值为序列中相邻元素差的绝对值之和. 如序列{2,1,3}的价值为|2-1|+|1-3|=3,而序列{4}的价值为0. ...
- 20190716NOIP模拟赛T2 通讯(tarjan缩点+贪心)
题目描述 “这一切都是命运石之门的选择.” 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短 信,并由此得知了伦太郎制作出了电话微波炉(仮). 为了掌握时间机器的技术,SERN总部 ...
- Jmeter(九)参数化
参数化是自动化测试脚本的一种常用技巧.简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则: 这样,脚本在运行时就可以根据需要选取不同的参数值作为输入. ...
- AcWing:165. 小猫爬山(dfs + 剪枝)
翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆 ...
- SQL语句中 NOT IN 子句的“正确打开方式”
在写SQL语句的时候,若where条件是判断用户不在某个集合当中,我们习惯使用 where 列名 not in (集合) 子句,这种写法本身没有问题,但实践过程中却发现很多人在写类似的SQL语句时,写 ...
- windows 安装多个版本的jdk后修改 环境变量不起作用
本机已经安装了jdk1.6,而比较早期的项目需要依赖jdk1.5,于是同时在本机安装了jdk1.5和jdk1.6. 安装jdk1.5前,执行java -version得到java version &q ...
- SpringMVC接收请求参数和页面传参
接收请求参数: 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(HttpServ ...
- scrapy_redis的使用
配置Scrapy-Redis 配置Scrapy-Redis非常简单,只需要修改一下settings.py配置文件即可. 1. 核心配置 首先最主要的是,需要将调度器的类和去重的类替换为Scrapy-R ...
- svn 巧用,如果遇到问题解决不了,而上一个版本可以正常使用,则可以查记录
svn 巧用,如果遇到问题解决不了 1.svn上一个版本可以正常使用的情况下 2.查看历史 3. 丢失的代码复制回来即可