zoukankan      html  css  js  c++  java
  • 【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,专门用于读取配置文件的信息
    
  • 相关阅读:
    mysqldump 导出数据库为DBname的表名为Tname的表结构 导出数据库的所有表的表结构
    mysqldump 备份某张表 Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions,
    nfs missing codepage or helper program, or other error
    date 增加一个小时 减少一个小时
    mysqldump 备份单个数据库
    mysql删除账户
    怎么删除某个用户的所有帖子?
    mongodb删除重复数据
    ReSharper2018破解详细方法
    激活windows和office
  • 原文地址:https://www.cnblogs.com/jwnming/p/13633928.html
Copyright © 2011-2022 走看看