zoukankan      html  css  js  c++  java
  • 集合简介和运用

    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);
    	}
    代码改变生活
  • 相关阅读:
    bzoj 1853: [Scoi2010]幸运数字 容斥
    bzoj 3545&&3551: [ONTAK2010]Peaks &&加强版 平衡树&&并查集合并树&&主席树
    bzoj 2331: [SCOI2011]地板 插头DP
    bzoj 3669: [Noi2014]魔法森林 动态树
    bzoj 2734: [HNOI2012]集合选数 状压DP
    bzoj 3751: [NOIP2014]解方程 同余系枚举
    bzoj 2594: [Wc2006]水管局长数据加强版 动态树
    bzoj 2049: [Sdoi2008]Cave 洞穴勘测 动态树
    bzoj 2209: [Jsoi2011]括号序列 splay
    bzoj 1223: [HNOI2002]Kathy函数 数位DP 高精度
  • 原文地址:https://www.cnblogs.com/LTJAVA/p/11368858.html
Copyright © 2011-2022 走看看