JAVA基础8 集合框架

JAVA基础

8.集合框架

8.1集合框架的体系结构

集合–集中合并数据----文件夹是一个集合的表现
–统一管理/处理数据
框架–jdk提供操作类库
集合框架–jdk提供的对集中合并数据进行统一管理/处理的开发类库。

交由集合统一管理/处理的数据有两种表现形式:
1、单列数据【独立的一个数据–数字,字符串,…】
100 ,”hello”
2、键值对数据 【一个数据是由键和建对应的值组成】
书的目录就是一种典型的键值对数据
【标题:页码】

8.2Conllection与Map

1、Collection接口是Jdk提供的处理单列数据的顶级接口。
2、Collection接口的子接口List接口处理有顺序的单列数据。
List接口可以有重复的数据元素,按照顺序区分。
ArrayList类
LinkedList类
3、Collection接口的子接口Set接口处理没有顺序的单列数据。
Set接口不能有重复的数据元素,【重复的元素被视为同一个】
HashSet类
LinkedHashSet类
在这里插入图片描述
Map接口是处理键值对数据的顶级集合接口
在这里插入图片描述
在这里插入图片描述

8.3List与Set

List和Set是用来存放集合的接口,并且二者都继承自接口Collection。
Collection接口的子接口List接口处理有顺序的单列数据。
List接口可以有重复的数据元素,按照顺序区分。
ArrayList类
LinkedList类
Collection接口的子接口Set接口处理没有顺序的单列数据。
Set接口不能有重复的数据元素,【重复的元素被视为同一个】
HashSet类
LinkedHashSet类

8.4ArrayList与LinkedList

ArrayList类
1.处理有顺序的单列数据
2.保存数据的存储空间,会自动扩展【注意与数组的区别】
3.可以保存任意数据类型的数据 【注意与数组的区别】
4.数据存储结构是动态数组结构【优势:查询速度快 缺点:添加/删除速度慢】
所属包:java.util
构造方法:
ArrayList() 构造一个初始容量为10的空列表。
ArrayList(Collection c) 将实现Collection接口的集合类转换成ArrayList
ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。
例如:

package com.click369.test1;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class TestMain {
	public static void main(String[] args) {
		//测试ArrayList的构造方法--创建对象
		//ArrayList() 构造一个初始容量为10的空列表。
		ArrayList  list1=new ArrayList();
		//ArrayList(Collection c) 将实现Collection接口的集合类转换成ArrayList
		ArrayList  list2=new ArrayList(list1);
		//ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。
		ArrayList  list3=new ArrayList(30);
		//可以利用List接口
		List  list11=new ArrayList();
		List  list22=new ArrayList(list11);
		List  list33=new ArrayList(40);
		//可以利用Collection接口
		Collection  list111=new ArrayList();
		Collection  list222=new ArrayList(list111);
		Collection  list333=new ArrayList(50);
	}
}

实例方法
add(E e) 将指定的元素追加到此列表的末尾。
clear() 从列表中删除所有元素。
contains(Object o) 如果此列表包含指定的元素,则返回 true 。
get(int index) 返回此列表中指定位置的元素。
indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
isEmpty() 如果此列表不包含元素,则返回 true 。
remove(int index) 删除该列表中指定位置的元素。
remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。
set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
size() 返回此列表中的元素数。
toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组
例如:

package com.click369.test2;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class TestMain {
	public static void main(String[] args) {
		//ArrayList中的实例方法
		ArrayList list1=new ArrayList();
		//1.add(E e) 将指定的元素追加到此列表的末尾。
		list1.add("hello");
		list1.add(true);
		list1.add(12.5);
		list1.add("hello");
		//2.size() 返回此列表中的元素数。
		System.out.println("list1的元素数="+list1.size());
		//3.clear() 从列表中删除所有元素。[清空]
		//list1.clear();
		//System.out.println("list1的元素数="+list1.size());
		//4.contains(Object o) 如果此列表包含指定的元素,则返回 true 。
		System.out.println("判断hello元素是否在list1这个集合中=="+list1.contains("hello1"));
		//5.get(int index) 返回此列表中指定位置的元素。
		//System.out.println("get(5)=="+list1.get(5));
		//6.indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
		System.out.println("hello元素在list1中第一次出现的位置=="+list1.indexOf("hello"));
		//7.lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
		System.out.println("hello元素在list1中最后一次出现的位置=="+list1.lastIndexOf("hello"));
		//8.isEmpty() 如果此列表不包含元素,则返回 true 。
		//list1.clear();
		//System.out.println("list1集合是否为空="+list1.isEmpty());
		//9.remove(int index) 删除该列表中指定位置的元素。 
		//list1.remove(2);
		//System.out.println("list1的元素数="+list1.size());
		//10.remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。 
		//list1.remove("hello");
		//System.out.println("list1的元素数="+list1.size());
		//System.out.println("get(0)=="+list1.get(0));
		//11.set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
		list1.set(0,"world");
		System.out.println("get(0)=="+list1.get(0));
		//12.toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的[Object]数组
		Object[] objs=list1.toArray();
	}
}

Iterator iterator() 以正确的顺序返回该列表中的元素的迭代器接口。【遍历ArrayList中的数据元素】
ArrayList集合的遍历
例如:

package com.click369.test3;
import java.util.ArrayList;
import java.util.Iterator;
public class TestMain {
	public static void main(String[] args) {
		//ArrayList集合的遍历
		ArrayList  list=new ArrayList();
		list.add("hello");
		list.add(1001);
		list.add("world");
		list.add(true);
		list.add(12.5);
		//1.通过普通的for循环遍历ArrayList集合
		for(int i=0;i<list.size();i++){
			System.out.println("list---"+list.get(i));
		}
		//2、使用增强的for循环
		for(Object obj:list){
			System.out.println("obj---"+obj);
		}
		//3.使用Iterator  iterator()迭代器
		Iterator it=list.iterator();
		while(it.hasNext()){
			Object obj=it.next();
			System.out.println("Iterator---"+obj);
		}
	}
}

LinkedList类
1.处理有顺序的单列数据
2.保存数据的存储空间,会自动扩展【注意与数组的区别】
3.可以保存任意数据类型的数据 【注意与数组的区别】
4.数据存储结构是链表【火车】结构【优势:添加/删除速度快 缺点:查询速度慢】

构造方法:
LinkedList() 构造一个空列表。
LinkedList(Collection c) 将实现Collection接口的集合类转换成LinkedList
例如:

package com.click369.test1;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
public class TestMain {
	public static void main(String[] args) {
		//测试LinkedList的构造方法--创建对象
		//LinkedList() 构造一个空列表。
		LinkedList  list1=new LinkedList();
		//LinkedList(Collection c) 将实现Collection接口的集合类转换成LinkedList
		ArrayList  alist=new ArrayList();
		LinkedList  list2=new LinkedList(alist);
		//可以利用List接口
		List  list11=new LinkedList();
		List  list22=new LinkedList(list11);
		//可以利用Collection接口
		Collection  list111=new LinkedList();
		Collection  list222=new LinkedList(list111);
	}
}

实例方法与ArrayList一样:
add(E e) 将指定的元素追加到此列表的末尾。
clear() 从列表中删除所有元素。
contains(Object o) 如果此列表包含指定的元素,则返回 true 。
get(int index) 返回此列表中指定位置的元素。
indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
isEmpty() 如果此列表不包含元素,则返回 true 。
remove(int index) 删除该列表中指定位置的元素。
remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。
set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
size() 返回此列表中的元素数。
toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组

LinkedList类提供了一组针对第一个元素和最后一个元素的操作方法:
addFirst(E e) 在该列表开头插入指定的元素。
addLast(E e) 将指定的元素追加到此列表的末尾
getFirst() 返回此列表中的第一个元素。
getLast() 返回此列表中的最后一个元素。
removeFirst() 从此列表中删除并返回第一个元素。
removeLast() 从此列表中删除并返回最后一个元素。
因为LinkedList类的数据存储结构是链表【火车】结构

例如:

package com.click369.test2;
import java.util.LinkedList;
public class TestMain {
	public static void main(String[] args) {
		//LinkedList中的实例方法
		LinkedList list1=new LinkedList();
		//1.add(E e) 将指定的元素追加到此列表的末尾。
		list1.add("hello");
		list1.add(true);
		list1.add(12.5);
		list1.add("hello");
		//2.size() 返回此列表中的元素数。
		//System.out.println("list1的元素数="+list1.size());
		//3.clear() 从列表中删除所有元素。[清空]
		//list1.clear();
		//System.out.println("list1的元素数="+list1.size());
		//4.contains(Object o) 如果此列表包含指定的元素,则返回 true 。
		//System.out.println("判断hello元素是否在list1这个集合中=="+list1.contains("hello"));
		//5.get(int index) 返回此列表中指定位置的元素。
		//System.out.println("get(2)=="+list1.get(2));
		//6.indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
		//System.out.println("hello元素在list1中第一次出现的位置=="+list1.indexOf("hello"));
		//7.lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
		//System.out.println("hello元素在list1中最后一次出现的位置=="+list1.lastIndexOf("hello"));
		//8.isEmpty() 如果此列表不包含元素,则返回 true 。
		//list1.clear();
		//System.out.println("list1集合是否为空="+list1.isEmpty());
		//9.remove(int index) 删除该列表中指定位置的元素。 
		//list1.remove(2);
		//System.out.println("list1的元素数="+list1.size());
		//10.remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。 
		//list1.remove("hello");
		//System.out.println("list1的元素数="+list1.size());
		//System.out.println("get(0)=="+list1.get(0));
		//11.set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
		//list1.set(0,"world");
		//System.out.println("get(0)=="+list1.get(0));
		//12.toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的[Object]数组
		//Object[] objs=list1.toArray();
		
		//LinkedList类提供了一组针对第一个元素和最后一个元素的操作方法:
		//addFirst(E e) 在该列表开头插入指定的元素。
		//addLast(E e) 将指定的元素追加到此列表的末尾
		//getFirst() 返回此列表中的第一个元素。 
		//getLast() 返回此列表中的最后一个元素。
		//removeFirst() 从此列表中删除并返回第一个元素。
		//removeLast() 从此列表中删除并返回最后一个元素。
		//因为LinkedList类的数据存储结构是链表【火车】结构
	}
}

LinkedList集合的遍历

package com.click369.test3;
import java.util.Iterator;
import java.util.LinkedList;
public class TestMain {
	public static void main(String[] args) {
		//LinkedList集合的遍历
		LinkedList  list=new LinkedList();
		list.add("hello");
		list.add(1001);
		list.add("world");
		list.add(true);
		list.add(12.5);
		//1.通过普通的for循环遍历ArrayList集合
		for(int i=0;i<list.size();i++){
			System.out.println("list---"+list.get(i));
		}
		//2、使用增强的for循环
		for(Object obj:list){
			System.out.println("obj---"+obj);
		}
		//3.使用Iterator  iterator()迭代器
		Iterator it=list.iterator();
		while(it.hasNext()){
			Object obj=it.next();
			System.out.println("Iterator---"+obj);
		}
	}
}
8.5HashSet与LinkedHashSet

HashSet类
1.处理的是没有顺序的单列数据【重复的元素算一个】
2.保存数据的存储空间,会自动扩展。
3.可以保存任意数据类型的数据。
构造方法:
HashSet() 构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
HashSet(Collection c)将实现Collection 接口的集合类转换成HashSet
HashSet(int initialCapacity) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。
HashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的负载因子
例如:

package com.click369.test1;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
public class TestMain {
	public static void main(String[] args) {
		//测试HashSet的构造方法--创建对象
		//HashSet() 构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
		HashSet set1=new HashSet();
		//HashSet(Collection c)将实现Collection 接口的集合类转换成HashSet
		ArrayList list=new ArrayList();
		HashSet	set2=new HashSet(list);	
		//HashSet(int initialCapacity) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。 
		HashSet set3=new HashSet(10);
		//HashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的负载因子
		HashSet set4=new HashSet(10,0.5f);
		//可以使用Set接口
		Set set11=new  HashSet();
		Set set22=new  HashSet(list);
		Set set33=new  HashSet(30);
		Set set44=new  HashSet(40,0.5f);
		//可以使用Collection接口
		Collection set111=new  HashSet();
		Collection set222=new  HashSet(list);
		Collection set333=new  HashSet(30);
		Collection set444=new  HashSet(40,0.5f);
	}
}

实例方法:
add(E e) 将指定的元素添加到此集合。
clear() 从此集合中删除所有元素。
contains(Object o) 如果此集合包含指定的元素,则返回 true 。
isEmpty() 如果此集合不包含元素,则返回 true 。
remove(Object o) 如果存在,则从该集合中删除指定的元素。
size() 返回此集合中的元素数。
toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的[Object]数组

例如:

package com.click369.test2;
import java.util.HashSet;
public class TestMain {
	public static void main(String[] args) {
		//HashSet中的实例方法
		HashSet set1=new HashSet();
		//1.add(E e) 将指定的元素追加到此列表的末尾。
		set1.add("hello");
		set1.add(true);
		set1.add(12.5);
		set1.add("hello");
		//2.size() 返回此列表中的元素数。
		//System.out.println("set1的元素数="+set1.size());
		//3.clear() 从列表中删除所有元素。[清空]
		//set1.clear();
		//System.out.println("set1的元素数="+set1.size());
		//4.contains(Object o) 如果此列表包含指定的元素,则返回 true 。
		System.out.println("判断hello元素是否在set1这个集合中=="+set1.contains("hello"));
		//5.isEmpty() 如果此列表不包含元素,则返回 true 。
		//set1.clear();
		//System.out.println("set1集合是否为空="+set1.isEmpty());
		//6.remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。 
		set1.remove("hello");
		System.out.println("set1的元素数="+set1.size());
		//7.toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的[Object]数组
		Object[] objs=set1.toArray();
	}
}

HashSet集合的遍历

package com.click369.test3;
import java.util.HashSet;
import java.util.Iterator;
public class TestMain {
	public static void main(String[] args) {
		//HashSet集合的遍历
		HashSet  set=new HashSet();
		set.add("hello");
		set.add(1001);
		set.add("world");
		set.add(true);
		set.add(12.5);
		//1、使用增强的for循环
		for(Object obj:set){
			System.out.println("obj---"+obj);
		}
		//2.使用Iterator  iterator()迭代器
		Iterator it=set.iterator();
		while(it.hasNext()){
			Object obj=it.next();
			System.out.println("Iterator---"+obj);
		}
	}
}

LinkedHashSet类
定义结构:
public class LinkedHashSet
extends HashSet
implements Set,

LinkedHashSet是HashSet类的子类
只要会使用HashSet,那么就一定会使用LinkedHashSet。

构造方法:
LinkedHashSet() 构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
LinkedHashSet(Collection c)将实现Collection 接口的集合类转换成LinkedHashSet
LinkedHashSet(int initialCapacity) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。
LinkedHashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的
实例方法:
add(E e) 将指定的元素添加到此集合。
clear() 从此集合中删除所有元素。
contains(Object o) 如果此集合包含指定的元素,则返回 true 。
isEmpty() 如果此集合不包含元素,则返回 true 。
remove(Object o) 如果存在,则从该集合中删除指定的元素。
size() 返回此集合中的元素数。
iterator() 返回此集合中元素的迭代器。

8.6HashMap与Hashtable与TreeMap与ConcurrentHashMap

java中的集合框架主要处理两类数据值
1.单列数据值—这个数据值是由一个具体的数据值组成
例如 : 100 “hello”
2.键值对数据值-- 这个数据值是键和值两部分组成的一个数据值
例如:书的目录就是一个典型的键值对数据值
标题-------页码【键值对】
Java的数据类型------------10
Java中处理键值对数据的集合框架
Map接口是处理键值对数据的顶级集合接口。
HashMap类
Hashtable类

HashMap类
1.可以处理键值对数据
2.保存键值对数据的存储空间会自动扩展。
3.所保存的键值对数据可以为null.[1.null=”sss” 2. “sss”=null 3. null=null]
4.保存的键值对数据是无序的。
5.不能有重复的键【重复的键算一个数据】
标题=页码
【键】=【值】

构造方法:
HashMap() 构造一个空的 HashMap ,默认初始容量(16)和默认负载系数(0.75)。
HashMap(int initialCapacity) 构造一个空的 HashMap具有指定的初始容量和默认负载因子(0.75)。
HashMap(int initialCapacity, float loadFactor) 构造一个空的 HashMap具有指定的初始容量和负载因子。
HashMap(Map m) 将实现Map接口的集合类转换成HashMap
例如:

package com.click369.test1;
import java.util.HashMap;
import java.util.Map;
public class TestMain {
	public static void main(String[] args) {
		//HashMap的构造方法--创建对象
		//HashMap() 构造一个空的 HashMap ,默认初始容量(16)和默认负载系数(0.75)。 
		HashMap  map1=new HashMap();
		//HashMap(int initialCapacity) 构造一个空的 HashMap具有指定的初始容量和默认负载因子(0.75)。
		HashMap map2=new HashMap(20);
		//HashMap(int initialCapacity, float loadFactor) 构造一个空的 HashMap具有指定的初始容量和负载因子。
		HashMap map3=new HashMap(30,0.5f);
		//HashMap(Map m) 将实现Map接口的集合类转换成HashMap
		HashMap map4=new HashMap(map1);
		//可以利用Map接口
		Map  map11=new HashMap();
		Map  map22=new HashMap(20);
		Map  map33=new HashMap(30,0.5f);
		Map  map44=new HashMap(map33);
	}
}

HashMap常用的实例方法:
put(K key, V value) 添加键值对数据。
size() 得到集合中键值对元素的个数。
isEmpty() 判断集合书否为空
clear() 清空集合。
containsKey(Object key) 判断指定的键数据在集合中是否存在。
containsValue(Object value) 判断指定的值数据在集合中是否存在 。
get(Object key)根据指定的键数据得到与这个键对应的值数据。
remove(Object key)根据指定的键数据删除整个键值对数据。
replace(K key, V oldValue, V newValue) 根据指定的键数据替换对应的值数据。
例如:

package com.click369.test2;
import java.util.HashMap;
import java.util.Map;
public class TestMain {
	public static void main(String[] args) {
		//HashMap的实例方法
		HashMap map1=new HashMap();
		//1.put(K key, V value) 添加键值对数据。 
		//键或者值都可以是任意数据类型
		map1.put("hello", 1001);
		map1.put(1002,"world");
		map1.put(true, 12.5);
		map1.put(120.5, false);
		//所保存的键值对数据可以为null.
		//map1.put(null, "test"); //键为null,值不为null
		//map1.put("test",null); //键不为null,值为null
		//map1.put(null,null); ///键为null,值为null
		//不能有重复的键【重复的键算一个数据】
		//map1.put("java","test1");
		//map1.put("java","test2");
		//2.size() 得到集合中键值对元素的个数。 
		System.out.println("map1集合键值对元素的个数=="+map1.size());
		//3.isEmpty() 判断集合是否为空 
		System.out.println("map1集合判断集合是否为空=="+map1.isEmpty());
		//4.clear() 清空集合。 
		//5.containsKey(Object key) 判断指定的键数据在集合中是否存在。
		System.out.println("判断指定的键数据在集合中是否存在=="+map1.containsKey("hello"));
		//6.containsValue(Object value) 判断指定的值数据在集合中是否存在 。
		System.out.println("判断指定的值数据在集合中是否存在=="+map1.containsValue("hello"));
		//7.get(Object key)根据指定的键数据得到与这个键对应的值数据。
		System.out.println("根据指定的键数据得到与这个键对应的值数据=="+map1.get("hello"));
		//8.remove(Object key)根据指定的键数据删除整个键值对数据。
		//map1.remove(true);
		//System.out.println("map1集合键值对元素的个数=="+map1.size());
		//System.out.println("根据指定的键数据得到与这个键对应的值数据=="+map1.get(true));
		//9.replace(K key, V oldValue, V newValue) 根据指定的键数据替换对应的值数据。
		System.out.println("根据指定的键数据得到与这个键对应的值数据=="+map1.get(1002));
		map1.replace(1002, "world", "hello");
		System.out.println("根据指定的键数据得到与这个键对应的值数据=="+map1.get(1002));
	}
}

遍历键值对对集合:
Set keySet() 得到键值对集合中所有键值对数据的键数据保存到set集合中
Collection values() 得到键值对集合中所有键值对数据的键数据保存到Collection集合中
Set<Map.Entry<K,V>> entrySet()得到键值对集合中所有键值对数据保存到Set<Map.Entry<K,V>>集合中
例如:

public static void main(String[] args) { 
		HashMap  map=new	HashMap();
		map.put(100,"zhangsan");
		map.put(12.5,true);
		map.put("test",1000);
		map.put(false,168.5);
		//Set<K>  keySet() 得到键值对集合中所有键值对数据的键数据保存到set集合中
		Set  keyset=map.keySet();
		for(Object  objkey:keyset){
			System.out.println("key==="+objkey);
		}	

		//Collection<V> values() 得到键值对集合中所有键值对数据的键数据保存到Collection<V>集合中
		Collection  vals=map.values();
		for(Object  objvalue:vals){
			System.out.println("value==="+objvalue);
		}	

		//Set<Map.Entry<K,V>>  entrySet()得到键值对集合中所有键值对数据保存到Set<Map.Entry<K,V>>集合中
		Set   k_v_set=map.entrySet();
		for(Object obj:k_v_set){
			System.out.println(obj);
		}
	
		//遍历Map集合的方法
		HashMap<String,String>  testmap=new	HashMap<String,String>();
		testmap.put("name","zhangsan");
		testmap.put("pass","123456");
		testmap.put("address","西安");
		for(Map.Entry<String,String>  entry:testmap.entrySet()){
			//System.out.println("mykey=="+entry.getKey());
			//System.out.println("myvalue=="+entry.getValue());
			System.out.println("k-v=="+entry.getKey()+":"+entry.getValue());
		}
	}

Hashtable类
1.可以处理键值对数据
2.保存键值对数据的存储空间会自动扩展。
3.不允许null出现
4.不能有重复的键【重复的键算一个数据】
5.保存的键值对数据是无序的。
构造方法:
Hashtable() 构造一个空的 Hashtable,默认初始容量(11)和默认负载系数(0.75)。
Hashtable(int initialCapacity) 构造一个空的 Hashtable具有指定的初始容量和默认负载因子(0.75)。
Hashtable(int initialCapacity, float loadFactor) 构造一个空的 Hashtable具有指定的初始容量和负载因子。
Hashtable(Map m) 将实现Map接口的集合类转换成Hashtable
例如:

package com.click369.test1;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
public class TestMain {
	public static void main(String[] args) {
		//Hashtable的构造方法--创建对象
		//Hashtable() 构造一个空的 Hashtable ,默认初始容量(11)和默认负载系数(0.75)。 
		Hashtable  table1=new Hashtable();
		//Hashtable(int initialCapacity) 构造一个空的 Hashtable具有指定的初始容量和默认负载因子(0.75)。
		Hashtable table2=new Hashtable(20);
		//Hashtable(int initialCapacity, float loadFactor) 构造一个空的 Hashtable具有指定的初始容量和负载因子。
		Hashtable table3=new Hashtable(30,0.5f);
		//Hashtable(Map m) 将实现Map接口的集合类转换成Hashtable
		HashMap map4=new HashMap();
		Hashtable table4=new Hashtable(map4);
		//可以利用Map接口
		Map  table11=new Hashtable();
		Map  table22=new Hashtable(20);
		Map  table33=new Hashtable(30,0.5f);
		Map  table44=new Hashtable(table33);
	}
}

实例方法:
put(K key, V value) 添加键值对数据。
size() 得到集合中键值对元素的个数。
isEmpty() 判断集合书否为空
clear() 清空集合。
containsKey(Object key) 判断指定的键数据在集合中是否存在。
containsValue(Object value) 判断指定的值数据在集合中是否存在 。
get(Object key)根据指定的键数据得到与这个键对应的值数据。
remove(Object key)根据指定的键数据删除整个键值对数据。
replace(K key, V oldValue, V newValue) 根据指定的键数据替换对应的值数据。
例如:

package com.click369.test2;
import java.util.Hashtable;
public class TestMain {
	public static void main(String[] args) {
		//Hashtable的实例方法
		Hashtable table1=new Hashtable();
		//1.put(K key, V value) 添加键值对数据。 
		//键或者值都可以是任意数据类型
		table1.put("hello", 1001);
		table1.put(1002,"world");
		table1.put(true, 12.5);
		table1.put(120.5, false);
		//不允许null出现
		//table1.put(null, "test"); 
		//table1.put("test",null); 
		//不能有重复的键【重复的键算一个数据】
		//table1.put("java","test1");
		//table1.put("java","test2");
		//2.size() 得到集合中键值对元素的个数。 
		System.out.println("table1集合键值对元素的个数=="+table1.size());
		//3.isEmpty() 判断集合是否为空 
		System.out.println("table1集合判断集合是否为空=="+table1.isEmpty());
		//4.clear() 清空集合。 
		//5.containsKey(Object key) 判断指定的键数据在集合中是否存在。
		System.out.println("判断指定的键数据在集合中是否存在=="+table1.containsKey("hello"));
		//6.containsValue(Object value) 判断指定的值数据在集合中是否存在 。
		System.out.println("判断指定的值数据在集合中是否存在=="+table1.containsValue("hello"));
		//7.get(Object key)根据指定的键数据得到与这个键对应的值数据。
		System.out.println("根据指定的键数据得到与这个键对应的值数据=="+table1.get("hello"));
		//8.remove(Object key)根据指定的键数据删除整个键值对数据。
		table1.remove(true);
		System.out.println("table1集合键值对元素的个数=="+table1.size());
		System.out.println("根据指定的键数据得到与这个键对应的值数据=="+table1.get(true));
		//9.replace(K key, V oldValue, V newValue) 根据指定的键数据替换对应的值数据。
		System.out.println("根据指定的键数据得到与这个键对应的值数据=="+table1.get(1002));
		table1.replace(1002, "world", "hello");
		System.out.println("根据指定的键数据得到与这个键对应的值数据=="+table1.get(1002));
	}
}

遍历兼职对集合:
Set keySet() 得到键值对集合中所有键值对数据的键数据保存到set集合中
Collection values() 得到键值对集合中所有键值对数据的键数据保存到Collection集合中
Set<Map.Entry<K,V>> entrySet()得到键值对集合中所有键值对数据保存到Set<Map.Entry<K,V>>集合中
例如:

package com.click369.test3;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TestMain {
	public static void main(String[] args) {
		//Hashtable的遍历
		Hashtable<Object,Object> table1=new Hashtable<Object,Object>();
		table1.put("hello", 1001);
		table1.put(1002,"world");
		table1.put(true, 12.5);
		table1.put(120.5, false);
		//遍历所有的键数据
		//Set<K>  keySet() 得到键值对集合中所有键值对数据的键数据保存到set集合中
		Set set1=table1.keySet();
		for(Object obj:set1){
			System.out.println("key=="+obj);
		}
		//使用迭代器遍历键数据对饮的set集合
		Iterator keyit=set1.iterator();
		while(keyit.hasNext()){
			System.out.println("keyit=="+keyit.next());
		}
		//遍历所有的值数据
		//Collection<V> values() 得到键值对集合中所有键值对数据的键数据保存到Collection<V>集合中
		Collection coll=table1.values();
		for(Object val:coll){
			System.out.println("value=="+val);
		}
		//使用迭代器遍历键数据对饮的set集合
		Iterator valit=coll.iterator();
		while(valit.hasNext()){
					System.out.println("valit=="+valit.next());
		}
		//遍历所有的键和值数据
		//Set<Map.Entry<K,V>> entrySet()得到键值对集合中所有键值对数据保存到Set<Map.Entry<K,V>>集合中
		//注意:HashMap<Object,Object> map1=new HashMap<Object,Object>();
		for(Map.Entry<Object,Object> entry : table1.entrySet()){
			Object k=entry.getKey();
			Object v=entry.getValue();
			System.out.println(k+"="+v);
		}
	}
}

在这里插入图片描述

8.7Conllection与Conllections

Collection是集合类的上级接口,继承与他有关的接口主要有List和Set
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作
Collection接口
1、Collection接口是Jdk提供的处理单列数据的顶级接口。
2、Collection接口的子接口List接口处理有顺序的单列数据。
List接口可以有重复的数据元素,按照顺序区分。
ArrayList类
LinkedList类
3、Collection接口的子接口Set接口处理没有顺序的单列数据。
Set接口不能有重复的数据元素,【重复的元素被视为同一个】
HashSet类
LinkedHashSet类
Collections类 【集合操作类的辅助类】
提供对集合进行操作的查询,复制,排序,线程安全操作的一系列静态方法
集合操作类的辅助类,与数组的辅助类【Arrays】相似。
例如:

package com.click369.test1;
import java.util.ArrayList;
import java.util.Collections;
public class TestMain {
	public static void main(String[] args) {
		//Collections类
		//是集合操作类的辅助类
		//提供了一组操作集合的静态方法【查询集合元素,复制集合中的元素进入另一个集合,为集合中的元素排序...】
		ArrayList list1=new ArrayList();
		list1.add("zhangsan");
		list1.add("lisi");
		list1.add("Lisi");
		list1.add("zhaoliu");
		//static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) 返回给定集合的最大元素。  
		Object  max=Collections.max(list1);
		System.out.println(max);
		//static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) 返回给定集合的最小元素。  
		Object  min=Collections.min(list1);
		System.out.println(min);
		System.out.println("------------------------");
		System.out.println("没有排序之前");
		for(Object obj:list1){
			System.out.println("没有排序之前=="+obj);
		}
		System.out.println("------------------------");
		// sort(List<T> list) 对指定的列表进行排序。
		Collections.sort(list1);
		System.out.println("排序之后");
		for(Object obj:list1){
			System.out.println("排序之后=="+obj);
		}
		//static <T> void copy(List<? super T> dest, List<? extends T> src) 将所有元素从一个列表复制到另一个列表中,会覆盖目标列表中的对应数据元素。  
		//注意:目标集合的元素个数  >= 源集合的元素个数 ,否则java.lang.IndexOutOfBoundsException: Source does not fit in dest
		ArrayList list2=new ArrayList();
		list2.add(234);
		list2.add(547);
		list2.add(13);
		list2.add(464);
		list2.add(4565);
		list2.add(6579823);
		Collections.copy(list2, list1);
		for(Object obj:list2){
			System.out.println("list2=="+obj);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Java集合框架中的Map是一种键值对的数据结构,可以存储一组具有唯一键和对应值的元素。使用泛型可以在编译时进行类型检查,确保集合中只能存储指定类型的元素,提高代码的可读性和安全性。 在引用中的示例代码中,List<String>定义了一个只能存储字符串类型元素的列表。在引用中的示例代码中,Collection<String>和Collection<Integer>分别定义了只能存储字符串类型和整数类型元素的集合。使用泛型通配符可以增加集合的灵活性。比如在coll.removeAll(c)方法中,传入的Collection对象的泛型可以是任意类型。另外,泛型还可以应用于Map集合,如引用中的示例代码中,Set<Map.Entry<String,String>>定义了只能存储键值对类型为String的元素的集合。 综上所述,Java集合框架中的Map和泛型可以一起使用,通过泛型可以指定集合中存储的元素类型,增加代码的可读性和类型安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [java基础中的--------Map+泛型](https://blog.csdn.net/liutaiwu/article/details/107915445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值