【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,专门用于读取配置文件的信息
posted @ 2020-09-08 17:32  JWnMing  阅读(84)  评论(0编辑  收藏  举报