Java中的集合层次结构分为单列集合(Collection)和双列集合(Map)。单列和双列的直接理解就是,集合的每个项能存储多少个数据。Collection以及它的子类在每个项中能存储一个数据,因此是单列集合。Map以及它的子类一次性能存储两个数据,键和值,因此是双列集合。
集合的特点:元素类型可以不同、集合长度可变、空间不固定
集合长度:.size() 获取size属性的长度
数组长度:.length()
Collection Framework(框架)
集合框架是一个统一的架构,用来表示和操作集合.
集合框架主要是由接口,抽象类和实现类构成.
接口:蓝色;实现类:红色
Collection:集合层次中的根接口,JDK没有提供这个接口的实现类。
Set:不能包含重复的元素,子接口SortedSet是一个按照自然升序排列的元素的Set。有个特例,HashSet实现类能支持数据重复。
List:可以包含重复的元素,是一个有序的集合,提供了按索引访问的方式,有次序,位置不改变。
集合框架中的实现类.
1.ArrayList类(java最最重要的集合类)
本质:我们可以将其看作是能够自动增长容量的数组,实际是采用对象数组实现的。自动增长容量就是当数组不够的时候,再定义更大的数组,然后将数组元素拷贝到新的数组.
2.LinkedList类LinkedList是采用双向循环链表实现的.
利用LinkedList实现栈(stack),队列(queue),双向队列(double-ended queue)
LinkedList常用方法
void addFirst(Object o)
void addLast(Object o)
Object getFirst()
Object getLast()
Object remove(int index)
boolean remove(Object o)
Object removeFirst()
Object removeLast()
isEmpty()判断是否为空
3.HashSet
HashSet实现了Set接口的hash table(哈希表),依靠HashMap来实现.
应该为要存放到散列表的各个对象定义hashCode()和equals().
因为实现了set接口所以不能有重复的元素…
常用方法
boolean add(Object o)
HashSet类实现了Set接口,所以不能有重复的元素.
4.TreeSet:TreeSet是依靠TreeMap来实现的.
TreeSet是一个有序集合,TreeSet中元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中元素要实现Comparable接口.
我们可以在构造TreeSet对象时,传递实现了Comparator接口的比较器对象.
HashSet是基于Hash算法实现的,其性能通常优于TreeSet.
通常都应该使用HashSet,在需要排序的功能时,才使用TreeSet.
Map
Map:存储的是key-value对(键值对),不能包含重复的key,可以有重复的value。子接口SortedMap是一个按升序排列key的Map。
Map接口实现类:
(一)HashMap:
对key进行散列.实现了所有hashmap操作,允许空值和空键.
map接口没有add()方法.
要放置元素通过put()方法.,放置相同的key值时会覆盖掉第一个value值
常用的方法.
Object put(Object key,Object value)获取元素的时候
Object get(Object key)通过键获取值
Hash表,通过键计算出相对应的存储位置的值,并输出.
Set entrySet()
返回一个键值对视图类型是Set.
返回的Set集合当中每一个对象都是一个Map.Entry对象.
Map.Entry是一个静态的接口.
接口中提供了常用方法
Object getKey()
Object getValue()
(二)TreeMap:
实现了sorted Map接口的类
TreeMap按照key进行排序.
类似HashMap用法
HashMap和TreeMap比较和Set类似,HashMap的速度通常都比TreeMap快,
只有在需要排序的功能的时候,才使用TreeMap.
一、Collection 体系
1.特点: Collection与Map相比,最大的特点是它是个单列集合。但我们不能说Collection是有序的,至少它的Set(散列)是一个无序的。这里的有序不是指从小到大的顺序排列,而是指集合存进去和取出来是否一样,能保证一样就是有序,不能确保一样就是无序。我们也不能说它是由索引的。因为它的子类List由索引,而set没有索引。所以这里对 Collection的特征描述就是, 一个具有迭代器,存储单列数据的顶层接口。
2.遍历方法:
1.利用方法toArray(),可以把集合转换成数组,然后遍历数组即可
2.使用迭代器Iterator():返回可以进行迭代器进行迭代的方法Collection不能用for循环遍历,因为它还不是一个有序的容器,要想使用for循环,只能用toArray()方法,先转换成一个有序的数组,再用for循环遍历 后面会讲到,for循环分为两种,基于索引值的称为普通for循环;基于底层实现为迭代器的称为增强for循环(也叫foreach); 另外,在选择是用迭代器遍历还是普通for循环遍历。有个判断方法是看集合本身有没有索引值。Iterator能够遍历Collection所有集合。普通for循环只能遍历有序有索引的List体系的集合。Set体系无序的集合不能遍历。
3.总结: 毕竟Collection是顶层接口,重点掌握它的应用: contain()方法,是否包含
toArray() 转为数组
Iterator() 迭代器