Java集合框架知识点

来源:互联网 发布:淘宝亲宝贝是什么 编辑:程序博客网 时间:2024/04/30 02:23

一.Collection Framework框架)
集合框架是一个统一的架构,用来表示和操作集合.
集合框架主要是由接口,抽象类和实现类构成.
接口:蓝色;实现类:红色
Collection
|_____
Set(HashSet)
|         |_____SortedSet(TreeSet)
|_____
List(LinkedList,ArrayList)

Collection:集合层次中的根接口,JDK没有提供这个接口的实现类。
Set:
不能包含重复的元素,子接口SortedSet是一个按照自然升序排列的元素的Set。有个特例,HashSet实现类能支持数据重复。
List:
可以包含重复的元素,是一个有序的集合,提供了按索引访问的方式,有次序,位置不改变。

(一)Collection接口常用的方法:

boolean

add(E o)
           确保此 collection 包含指定的元素(可选操作)。

 

boolean

contains(Object o)
           如果此 collection 包含指定的元素,则返回 true。

 

boolean

remove(Object o)
      从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。

 

int   

size()
           返回此 collection 中的元素数。

 

Object[]

toArray()
           返回包含此 collection 中所有元素的数组。

 

Iterator<E>

iterator()
           返回在此 collection 的元素上进行迭代的迭代器。

List接口特有方法:

E     

get(int index)
           返回列表中指定位置的元素。

SortedSet接口特有方法:

E     

first()
           返回此有序集合中当前第一个(最小的)元素。

 

E     

last()
           返回此有序集合中最后一个(最大的)元素。

 

 

 

(二)集合框架中的实现类. 

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---(HashMap)
|_____
SortedMap(TreeMap)

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.

 

 

三.泛型

(一)泛型的定义

即“参数化类型”。顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),

然后在使用/调用时传入具体的类型(类型实参)。

 

 

采用泛型写法后,通过List<String>,直接限定了list集合中只能含有String类型的元素为此时,集合能够记住元素的类型信息,编译器已经能够确认它是String类型了。

结合上面的泛型定义,我们知道在List<String>中,String是类型实参,也就是说,相应的List接口中肯定含有类型形参。且get()方法的返回结果也直接是此形参类型(也就是对应的传入的类型实参)。

    (二)泛型的应用

    泛型主要的应用还是结合java集合类的使用,在后面的一系列总结会有对泛型的总结。

 

 

 

四.迭代器:Iterator接口

Collection提供了一个iterator()方法,可以返回一个迭代器,迭代器是指向两个元素之间的指针。凡是继承自Collection的接口或间接的实现类都有这个方法.
     (一)迭代器3个方法
       1.hasNext()
    2.next()

3.remove()

hasNext()判断是否有更多的元素,如果有返回true

next()返回的是下一个对象值
remove()
方法remove()方法需要删除上一个返回的元素,需要先调用next()方法后在用remove(),返回的列表有时不一定真正实现remove()方法,根据需要决定是否实现.
(二)迭代器的使用场合

  迭代器能用于查找和删除。用while(。hasNext())判断是否有对象元素,如果有的话用。Next方法接收对象
    但是迭代器最主要的功能还是用来删除list里面某个对象的值,用到。Remove,使用其他方法删除list里面的值,都有可能会报错!


五.Collections工具类
Collections
类不同于Collection
      (一)Collections.sort(List list)

主要是对列表排序.
static void sort(List list)
方法是按升序对指定列表排序.
自然排序法. 
这里List的泛型类要实现comparable接口的实现方法compareTo(Object o1).

 

 

(二)Collections.sort(List list,C c)
排序的时候可以传递一个比较器.
类C要实现Comparator接口.里面的实现方法intcompare(Object o1,Object o2)
 实现一个比较器.
比较器总是和一个特定的类相关.
   

   

本文主要是对集合部分常用的知识点做概述,后面还会详细讲解各个知识点的理解和应用。

集合主要能掌握ArrayList实现类就基本能解决大部分问题了,这也是我们要学习集合的重点。HashMap也会用到一点。其他的知识都用得很少。


原创粉丝点击