集合简介和运用

Collection

它是集合框架中的根接口,它提供了对集合的基本操作

最常用的两个子接口:

		List: 有序,可重复的

		Set: 无序(存取顺序不保证一致),不可重复


List:常用的实现类:

	ArrayList
	LinkedList


Set常用的实现类:

	HashSet
	TreeSet
	LinkedHashSet

List

泛型: 在创建集合时,明确集合中存储数据的类型,要指定数据类型


## 1.1 ArrayList   底层数据结构是数组



	创建一个ArrayList集合:

	格式:ArrayList<数据类型> 集合名 = new ArrayList<>

	注:数据类型不能是基本数据类型,必须是基本数据类型的包装类

	基本数据类型			包装类

	byte       			Byte
	short 				Short
	int					Integer
	long				Long
	float				Float
	double				Double
	char				Character
	boolean				Boolean



常用方法:
		增:
			1、 add(e):在集合的末尾添加元素,并返回true

			2、 add(index,e):在指定位置添加元素 返回类型是void

		删:
			1、 remove(index): 移除指定下标的元素  会返回被删除的元素

			2、 remove(object): 移除第一次出现的元素对象  如果元素不存在,返回false,删除失败

		
			3、set(index,e): 通过下标修改内容

	
			4、get(index): 通过下标获取元素

		
			5、clear(): 清空

			6、contains(e):判断是否包含指定元素

			7、isEmpty():判断集合内容是否为空

			8、indexOf(e):通过指定元素获取第一次出现的下标
			元素不存在则返回-1,

			9、lastIndexOf(e) 通过指定元素获取最后一次出现的下标

			10、size():获取集合长度

			11、Collections.swap(e,i,j):

					将e集合中的 i 和 j 位置的元素交换位置


        遍历:
	for(int i = 0 ; i <list.size() ; i ++){
		//list.get(i);
	}



       嵌套: 	
        1、在集合中嵌套集合:

	    单一集合:ArrayList<String> list1 = new ArrayList<>(); 
	
	    嵌套集合:ArrayList<ArrayList<String>> list = new ArrayList<>(); 


        2、在集合中嵌套数组:

	    String [] str1 = {"a","c","f","g"}
	    String [] str2= {"s","c"}
	    String [] str3 = {"a","c"}

	    ArrayList<String[]> list = new ArrayList<>();

	    list.add(str1);
	    list.add(str2);
	    list.add(str3);




## 1.2 LinkedList     底层数据结构是链表

	
	LinkedList:增删快

	ArrayList: 查询快


	适用场景:

		LinkedList 一般用于增删频繁的业务逻辑中,常会使用在池相关的技术中

		ArrayList 大多使用在查询频繁的业务逻辑中,一般 “好友列表”,“商品列表”,“订单列表” 都会使用

Set

特点: 无序(存取顺序可能不一致)、不可重复

创建:

	HashSet<String> set = new HashSet<String>();

迭代器 Iterator

普通循环:

	1、可以遍历 数组
	2、可以遍历 List


增强for循环:(for-each)

	for(数据类型  变量名: 数据源){

	}

	1、可以遍历 数组
	2、可以遍历 List
	3、可以遍历 Set



迭代器:

	可以遍历: List 、Set、 Map


	迭代的步骤:

		1、 通过介个的iterator()方法获取迭代器对象,将迭代器与该集合绑定

		2、循环,判断是否有可迭代的元素 用hasNext()方法
		 	还有元素则使用next()方法获取
		 	没有的话,循环终止


	注:

		在迭代过程中不能对集合进行增删改,会由于不确定性发生

		ConcurrentModificationException



		解决办法: 使用ListIterator

		步骤:

			







# Map 

	Map 中数据的存储方式与其他集合不同,他的数据是以“键值对”的方式存储的

	需要在创建Map集合时,明确Map中键(key)和值(value)的数据类型
	表示只有通过此键值对产生的映射关系,才能确定一个确切的数据。


	注:1、键是唯一的(当键重复时,会覆盖掉之前的)
		2、值可以重复
		3、map也是无序的(存取顺序不一致)

	实现类:

		HashMap

		TreeMap

		LinkedHashMap



	常用方法:

		1、put(k, v):将k-v键值对存储到map中,并返回被覆盖的v

		2、remove(k):通过键,删除整个键值对,并返回删除的值

		3、remove(k, v):只有键和值相匹配时才能删除,并返回布尔值

		4、replace(k, v):通过键,去修改键对应的值,并返回被替换掉的值

		5、replace(k, old v, new v):只有键和旧值匹配时,才用新值替换旧值,并返回布尔值

		6、get(k):  通过键,获取值




### Map的迭代方法:

	Map不能使用普通或增强for循环
	Map不是数组,也不是iterator实例,Map不同于List、set、,这两个都继承了
	Collection,而collection继承了Iterator,所以List、Set就是Iterator的实例,所以不仅可以使用for循环,也可以用iterator迭代器迭代

	1、keySet():调用 map.keySet()会返回map中所有键组成的set集合

		//通过keySet方法获取map集合中所有键组成的集合
		Set<String > set = map.keySet();
		//通过set的iterator方法获取set集合的迭代器对象
		Iterator<String> iterator  = set.iterator();
		//循环判断并获取
		for(;iterator.hasNext();){
			//获取键
			String key = iterator.next();
			System.out.println(key+"="+map.get(key));//通过建,获取值
		}




	2、entrySet() 

	//通过Map的entrySet方法获取map中所有键值对的映射关系所组成的set集合
	//关系是两个值,有键有值,所有要用Entry<String,String>
	Set<Entry<String,String >>set=map.entrySet();

	//通过set的iterator方法获取迭代器对象
	Iterator<Entry<String, String>> it=set.iterator();

	//循环判断并获取
	while(it.hasNext()){

		//映射关系对象
		Entry<String, String> entry = it.next();

		//获取映射关系的key和value
		String key = entry.getKey();
		String value = entry.getValue();

		System.out.println(key+"="+value);
	}

posted on 2019-08-17 15:40  半缘卿  阅读(117)  评论(0编辑  收藏  举报

导航