集合框架(三)

Map(掌握)

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

2、Map和Collection的区别

		A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
		B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍

3、Map接口功能概述

		A:添加/修改功能
			V put(K key,V value)
			如果键是第一次存储,就直接存储元素,返回null
			如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
		B:删除功能
			void clear():移除所有的键值对元素
			V remove(Object key):根据键删除键值对元素,并把值返回
		C:判断功能
			boolean containsKey(Object key):判断集合是否包含指定的键
			boolean containsValue(Object value):判断集合是否包含指定的值
			boolean isEmpty():判断集合是否为空
		D:获取功能
			Set<Map.Entry<K,V>> entrySet():获取键值对对象的集合
			V get(Object key):根据键获取值
			Set keySet():获取集合中所有键的集合
			Collection values():获取集合中所有值的集合
		E:长度功能
			int size():返回集合中的键值对的对数

4、Map集合的遍历

		A:键找值
			a:获取所有键的集合
			b:遍历键的集合,得到每一个键
			c:根据键到集合中去找值

		B:键值对对象找键和值
			a:获取所有的键值对对象的集合
			b:遍历键值对对象的集合,获取每一个键值对对象
			c:根据键值对对象去获取键和值

		代码体现:
			Map<String,String> hm = new HashMap<String,String>();

			hm.put("it002","hello");
			hm.put("it003","world");
			hm.put("it001","java");

			//方式1 键找值
			Set set = hm.keySet();
			for(String key : set) {
				String value = hm.get(key);
				System.out.println(key+"---"+value);
			}

			//方式2 键值对对象找键和值
			Set<Map.Entry<String,String>> set2 = hm.entrySet();
			for(Map.Entry<String,String> me : set2) {
				String key = me.getKey();
				String value = me.getValue();
				System.out.println(key+"---"+value);
			}

5、HashMap集合的练习

		A:HashMap<String,String>
		B:HashMap<Integer,String>
		C:HashMap<String,Student>
		D:HashMap<Student,String>

6、HashMap集合的练习

		A:TreeMap<String,String>
		B:TreeMap<Student,String>

7、HashMap集合的练习

		A:统计一个字符串中每个字符出现的次数
		B:集合的嵌套遍历
			a:HashMap嵌套HashMap
			b:HashMap嵌套ArrayList
			c:ArrayList嵌套HashMap
			d:多层嵌套

Collections(理解)

	1、是针对集合进行操作的工具类
	2、面试题:Collection和Collections的区别
		A:Collection 是单列集合的顶层接口,有两个子接口List和Set
		B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等
	3、常见的几个小方法:
		A:public static  void sort(List list)
		B:public static  int binarySearch(List<?> list,T key)
		C:public static  T max(Collection<?> coll)
		D:public static void reverse(List<?> list)
		E:public static void shuffle(List<?> list)
	4、案例
		A:ArrayList集合存储自定义对象的排序
		B:模拟斗地主洗牌和发牌
		C:模拟斗地主洗牌和发牌并对牌进行排序

集合总结归纳

Collection(单列集合)
		List(有序,可重复)
			ArrayList
				底层数据结构是数组,查询快,增删慢
				线程不安全,效率高
			Vector
				底层数据结构是数组,查询快,增删慢
				线程安全,效率低
			LinkedList
				底层数据结构是链表,查询慢,增删快
				线程不安全,效率高
		Set(无序,唯一)
			HashSet
				底层数据结构是哈希表。
				哈希表依赖两个方法:hashCode()和equals()
				执行顺序:
					首先判断hashCode()值是否相同
						是:继续执行equals(),看其返回值
							是true:说明元素重复,不添加
							是false:就直接添加到集合
						否:就直接添加到集合
				最终:
					自动生成hashCode()和equals()即可

				LinkedHashSet
					底层数据结构由链表和哈希表组成。
					由链表保证元素有序。
					由哈希表保证元素唯一。
			TreeSet
				底层数据结构是红黑树。(是一种自平衡的二叉树)
				如何保证元素唯一性呢?
					根据比较的返回值是否是0来决定
				如何保证元素的排序呢?
					两种方式
						自然排序(元素具备比较性)
							让元素所属的类实现Comparable接口
						比较器排序(集合具备比较性)
							让集合接收一个Comparator的实现类对象
	Map(双列集合)
		A:Map集合的数据结构仅仅针对键有效,与值无关。
		B:存储的是键值对形式的元素,键唯一,值可重复。

		HashMap
			底层数据结构是哈希表。线程不安全,效率高
				哈希表依赖两个方法:hashCode()和equals()
				执行顺序:
					首先判断hashCode()值是否相同
						是:继续执行equals(),看其返回值
							是true:说明元素重复,不添加
							是false:就直接添加到集合
						否:就直接添加到集合
				最终:
					自动生成hashCode()和equals()即可
			LinkedHashMap
				底层数据结构由链表和哈希表组成。
					由链表保证元素有序。
					由哈希表保证元素唯一。
		Hashtable
			底层数据结构是哈希表。线程安全,效率低
				哈希表依赖两个方法:hashCode()和equals()
				执行顺序:
					首先判断hashCode()值是否相同
						是:继续执行equals(),看其返回值
							是true:说明元素重复,不添加
							是false:就直接添加到集合
						否:就直接添加到集合
				最终:
					自动生成hashCode()和equals()即可
		TreeMap
			底层数据结构是红黑树。(是一种自平衡的二叉树)
				如何保证元素唯一性呢?
					根据比较的返回值是否是0来决定
				如何保证元素的排序呢?
					两种方式
						自然排序(元素具备比较性)
							让元素所属的类实现Comparable接口
						比较器排序(集合具备比较性)
							让集合接收一个Comparator的实现类对象

2、到底使用那种集合

		看需求。

	是否是键值对象形式:
		是:Map
			键是否需要排序:
				是:TreeMap
				否:HashMap
			不知道,就使用HashMap。

		否:Collection
			元素是否唯一:
				是:Set
					元素是否需要排序:
						是:TreeSet
						否:HashSet
					不知道,就使用HashSet

				否:List
					要安全吗:
						是:Vector(其实我们也不用它,后面我们讲解了多线程以后,我在给你回顾用谁)
						否:ArrayList或者LinkedList
							增删多:LinkedList
							查询多:ArrayList
						不知道,就使用ArrayList
			不知道,就使用ArrayList

3、集合的常见方法及遍历方式

		Collection:
		add()
		remove()
		contains()
		iterator()
		size()

		遍历:
			增强for
			迭代器

		|--List
			get()

			遍历:
				普通for
		|--Set

	Map:
		put()
		remove()
		containskey(),containsValue()
		keySet()
		get()
		values()
		entrySet()
		size()

		遍历:
			根据键找值
			根据键值对对象分别找键和值

	作业:
		我讲解过的任意一个集合,我要求你存储什么,你就能够存储什么。
		并且,还要能够遍历出来。

4、ArrayList,LinkedList,HashSet,HashMap(掌握)

		存储字符串和自定义对象数据并遍历

5、集合的嵌套遍历(理解)

时间: 2024-10-08 20:48:54

集合框架(三)的相关文章

java 集合框架(三)Collection

Collection是集合框架的根接口,一个集合代表一组对象,我们称之为元素.不同的集合具有不同的特性,比如有的集合可以有重复元素,有的不可以,有的可以排序,有的不可排序,如此等等,而Collection作为集合的根接口,它规范定义了集合的通用方法,一个集合我们可以看作一个在内存中的小型数据库,而数据库的常用操作无外乎"增删改查",Collection中的方法也大体是这些类型操作. Java集合框架中没有直接实现Collection的子类,而是通过一系列子接口,比如List,Set,Q

Java集合框架(三)

 Map Map集合:该集合存储键值对,一对一对的往里存,而且要保证键的唯一性. Map |------HashTable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.JDK1.0,效率低. |------HashMap:底层是哈希表数据结构,允许使用 null值和 null键,该集合是不同步的.JDK1.2,效率高. |------TreeMap:底层是二叉树数据结构,线程不同步,可以给map集合中的键进行排序. 和Set很像,其实,Set底层就是使用了Map集合

集合框架(三)

Map的常用方法: Object  put(Object key Object  values )  以键 -值的方式进行存储   键必须是唯一的,值可以重复 Object get() 根据返回相关联的值,若不存在指定的值,返回null Object remove()  删除指定的键映射的"键-值对" int size() 返回元素个数 Set keySet()  返回键的集合 boolean containsKey(Object  key) 若存在指定的键映射的"键-值对&

Java学习笔记29(集合框架三:泛型)

泛型的概念: 简单地讲,就是同一个方法(类),可以接受不同的数据类型并运行得到相对应的结果,不会出现安全问题 上一篇有一段这样的代码: 没有定义集合类型.迭代器类型 package demo; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionDemo { public static void main(String[] args)

Java集合框架(二)day_16

16.集合框架(去除ArrayList中重复字符串元素方式)(掌握) public class Demo1_ArrayList { /** * * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) * 思路:创建新集合方式 */ public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("a"); list.add("a"

JAVA学习第三十九课(常用对象API)- 集合框架(七)— Map集合及其子类对象

一.Map集合常见子类 HashTable:内部结构是哈希表,同步,此实现提供所有可选的映射操作,不允许使用 null 值和 null 键 (HashTable下有子类Properties,使用频率非常高,用来存储键值对型的配置文件信息和IO技术相结合) HashMap:内部结构是哈希表,不同步,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键. TreeMap:内部结构是二叉树,不同步,可以对Map集合中的键进行排序. 二.HashMap演示 import java.ut

JAVA学习第三十四课(常用对象API)- 集合框架(二)—List集合及其子类特点

整个集合框架中最常用的就是List(列表)和Set(集) 一.List集合 && Set的特点 Collection的子接口: 1.List:有序(存入和取出的顺序一致),元素都有索引且可以重复    API文档解释:有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素. 2.Set:元素不能重复,无序,有可能会有序    API文档解释:一个不包含重复元素的 coll

Java复习第三天---集合框架的相关知识

集合框架总览: Collection 接口常用方法 //1.add()向集合中添加数据 c.add(apple01); c.add(apple02); c.add(apple03); c.add(apple04); c.add(apple05); //2.isEmepty()检测当前集合是否为空 boolean empty = c.isEmpty(); System.out.println("is empty:"+empty); //3.size()返回当前集合的长度 int size

JAVA学习第三十五课(常用对象API)- 集合框架(三)—Vector、LinkedList、ArrayList集合演示

集合框架构成图 摘自百度图片 一.Vector集合 演示 虽然Vector已经不常用了,但是还是要了解一下其中的方法 import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Vector

JAVA 笔记(三) 从源码深入浅出集合框架

集合框架概述 以Java来说,我们日常所做的编写代码的工作,其实基本上往往就是在和对象打交道. 但显然有一个情况是,一个应用程序里往往不会仅仅只包含数量固定且生命周期都是已知的对象. 所以,就需要通过一些方式来对对象进行持有,那么通常是通过怎么样的方式来持有对象呢? 通过数组是最简单的一种方式,但其缺陷在于:数组的尺寸是固定的,即数组在初始化时就必须被定义长度,且无法改变. 也就说,通过数组来持有对象虽然能解决对象生命周期的问题,但仍然没有解决对象数量未知的问题. 这也是集合框架出现的核心原因,