• 【Java】Java中的集合框架、泛型


    集合框架、泛型

    1).Collection

    集合:一类特殊的对象(用于保存多个对象的对象)
    	Collection:元素必须是引用类型,在遍历时需要for each方式(因为数据没有下标)
    	Collection 重要的两个子接口:①List  ②Set
    
    	Collection集合的重要的方法:
    		add(E e)	顺序的添加元素到集合中
    		remove(Object o)	从集合移除
    		size()	返回collection集合中的元素数量
    		Object[]  toArray()	返回包含collection中所有元素的数组
    		void clear()		移除collocation中所有的元素
    		boolean contains()	判断集合是否包含特定元素
    
    注:
    	在遍历时要使用for(集合类型 引用名:数组或集合);
    

    2).List

    元素内容可以重复,有顺序也有下标(可用for遍历,也可用for…each遍历)

    常见实现类:
    (1)ArrayList	jdk1.2	底层数组实现	查询快,增删慢	线程不安全	轻量级实现	效率高
    (2)LinkedList	jdk1.2	底层链表实现	查询慢,增删快	
    (3)Vector		jdk1.1	底层数组实现	查询快,增删慢	线程安全	重量级实现	效率低
    
    	常见方法:
    	void add()	顺序添加
    	void add(int index,E element)	指定下标插入
    	E get(int index)	指定下标获取值
    	E remove(int index)	指定下标删除
    	E set(int index,E element)	指定下标更新元素
    	size()	返回长度
    	indexOf(Object o)	获取从前往后第一次出现的下标
            List<E>   subList(int fromIndex,int toIndex)	返回从fromindex到toindex-1处所有元素组成的子集合
    

    3).Set

    元素内容不可以重复,储存没有顺序,而且无下标(只能用for…each遍历)

    	常见实现类:
    	(1)HashSet 
              添加元素过程:
                ①元素调用hashCode(),获取哈希码,然后对长度求模(%),获取下标(随机性)
                ②如果在index处为空,则直接添加;否则使用equals比较两个元素是否相同(可自己覆盖其equals方法),
                      如果相同添加失败,如果元素不同,则使用链表和前面的元素连起来
                注意:开发中往往可能需要覆盖父类的hashCode()和equals()方法;
                      如果是自定义类型,为保证元素的内容相同就是相同元素,我们必须重新hashCode和equals方法,其要求:
                      1)内容相同的对象(利用equals方法),必须放回相同的哈希码
                      2)内容不同的对象,极可能返回不同的哈希码
    
                      a) LinkedHashSet(继承自HashSet):自定义类型,为保证元素内容不重复,必须必须重写hashCode和equals方法;添加是有顺序的,遍历时和添加的时的顺序一致
    	(2)SortedSet
                      b) TreeSet(继承自SortedSet):可以根据元素的内容自动升序排序,并且不重复。在自定义该集合类型时,为保证元素内容不重复,必须实现coMparable接口并实现compareTo方法
    	
    	常见方法:
    	void add(E e)	添加元素,存储顺序随机
    	E remove(Object o)	指定元素删除
    	int size()	返回长度
    	void clear()	清除所有元素
    	boolean contains(E e)判断是否包含
    
    	HashSet			jdk1.2	底层实现是散列表
    	LinkedHashSet		jdk1.2	底层实现是散列表和链表
    	TreeSet			jdk1.2	底层实现是红黑树
    

    4).泛型

    参数化类型、模板编程
    	定义类型时,使用类型变量代替;使用泛型类型时,必须传入确切的类型,泛型默认类型时object类型,利用泛型技术可以构建元素类型安全的集合
    List<Object> list = new List<>();  //系统会根据传入的参数进行推断其类型
    List<T>………此处的T,可以是自定义的类型,比如自定义类
    
    在定义类时也可以用泛型:
    	public class Student<T> {
    	public T method(){return T;}
    }
    泛型可约定范围
    	<T extends Number> 约定T的类型为数值类型
    	Number 是short  int  double  float  long  byte 的父类
    

    5).Map

    集合Map是单独的集合,并不是Collection的子类集合,其常见的实现类有:
    	(1)HashMap	
    	(2)LinkedHashMap
    	(3)TreeMap
    	(4)Hashtable
    	(5)Properties 		继承自Hashtable, 键值对为String,大多用于配置文件的存取
    
    Map:元素有key(键)和value(值),其中的键(key)不能重复,而值可以重复
    		map内的键-值对存储是无序的,没有下标的
    -------------------------------------------------------------------------------------------------------------
    HashMap:
    常见方法:①put(Object K,Object V)②remove(key)删除key键的键值对③size()④get(key)⑤containsKey(Object Key)是否包含key⑥containsValue(Object Value)是否包含值⑦values()获取所有的值⑧KeySet()获取所有的键
    
    遍历方法:
    	Map<T, T>  map = new HashMap<>();
    
    (1)对键(key)遍历
    	a)  for(T  t : map.KeySet() ){} 	//获取的key集合给o引用
    	b)  Set<T> set = map.KeySet();			//用set集合实现,可以通过键找到值
    		for(T  t:set ){}
    
    (2)对值(value)遍历
    	a)  for(T  t : map.ValueSet() ){}		//对值进行遍历
    	b)  Collection<T> c = map.values();			//通过collection集合实现(值因为可能有重复),通过值无法找到键
    		for(T  t: c){}
    
    (3)对键-值(key, value)对遍历
    	Set<Map.Entry<K, V>>  set = map.entrySet();
    	for(Map.Entry<K, V>  me : set){}			
    
    注: //Map.Entry<T, T>是一个类类型 ,它有两个重要的方法:getKey() / getValue();  //获取建和值
    

    6).了解内容

    (1)HashMap		jdk1.2	底层是散列表	线程不安全,轻量级实现,允许null键-值对
    (2)LinkedHashMap	jdk1.2	散列表+链表		保证键-值对的遍历时顺序和添加时顺序一致
    (3)TreeMap		jdk1.2	红黑树			可以根据key的内容对键值对进行自动升序排序
    (4)Hashtable		jdk1.0	底层是散列表	线程安全,重量级实现,键和值都不能为null
    (5)Properties		jdk1.0	Hashtable子类	键-值对都是String,专门用于读取配置文件的信息
    
  • 相关阅读:
    tetrahedron (公式)
    Subway (树中心 + 树hash)
    包装类的Null值
    基本数据类型的范围边界
    基本数据类型的装箱和拆箱()优先使用基本数据类型
    第三章-python基础 笔记
    第二章-Python起步
    第一章-欢迎来到python世界
    第八章-连接与多张表的操作
    php错误和异常的处理方式
  • 原文地址:https://www.cnblogs.com/jwnming/p/13633928.html
Copyright © 2020-2023  润新知