黑马程序员-集合类

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

集合类

一、 java的集合框架(常用):
数据多了用对象装,对象多了用集合装;java提供的常用的集合类框架如下:
Collection<Interface>
    |--List<Interface>    (元素可以重复,有序,该集合体系有索引)
        |--ArrayList    (底层数组存储,带脚标)
        |--LinkedList    (底层链表存储)
        |--vecter
    |--Set<Interface>    ( 元素不可重复,无序)
        |--HashSet
        |--TreeSet
Map<Interface>
    |--HashMap
    |--TreeMap
    |--HashTable

集合框架总览:


二、Collection根接口
1.Collection共性方法:
添加:
add(E e)     添加元素。
addAll(Collection<? extend E> c)     一次添加一堆元素。
删除:
clear()    清空容器。
remove(Object o)     删除元素。
removeAll(Collection<?> c)     删除一堆。
判断:
contains(Object o)    判断是否包含某元素。
contains(Collection<?> c)    判断是否包含一堆元素。
isEmpty()    判断容器是否为空。
获取:
Iterator()    获取迭代器。
size()    获取长度。
retainAll(Collection<?> c)    保留交集,注意:返回值是boolen。
转换:
toArray()     转换成数组,数组类型Object。
toArray(T[ ] a)    转换成数据,指定数组类型

2、List特有方法:(带脚标的方法)
添加:
add(int index, E e)    在指定位置添加元素。
addAll(int index, Collection<? extends E> c)    在指定位置添加一堆。
删除:
remove(int index)     删除指定位置元素。
改:(LIst独有)
set(int index, E e)    改变指定位置元素。
判断:
获取:
get(int index)    获取指定位置元素。
indexOf(Object o)    返回LIst中第一次出现的指定元素的索引,如不存在返回-1。
lastIndexOf(Object o)     
返回LIst中最后一次出现的指定元素的索引,如不存在返回-1。
listIterator()    获取列表迭代器。
listIterator(int index)    
获取列表迭代器,从指定位置开始迭代。
subList(int fromIndex, int toIndex)    返回指定范围部分视图。
(1)ArrayList    底层数组存储,查询较快,删除较慢。
特有方法:
trimToSize()    
将此  ArrayList 实例的容量调整为列表的当前大小。

(2)LinkedList    底层用链表存储,删除快,查询慢(元素只认识旁边元素)
特有方法:
添加:
addFirst(E e)    offerFirst(E e) 添加元素到开头。
addLast(E e)    offerLast(E e)添加元素到结尾。
删除:
removeFirst()    pollFirst()     poll()     返回第一个元素并移除。
removeLast()    pollLast()     返回第一个元素并移除。
获取:
peekFirst()    
peek()    获取第一个元素。
peekLast()    获取最后元素。
pop()    
从此列表所表示的堆栈处弹出一个元素。
push()    
 将元素推入此列表所表示的堆栈。

(3)vecter    
 和ArrayList功能相同,元老级,集合框架是在1.2版本出现的,1.2之前集合容器只有vecter。
与ArrayList的区别:
1、vecter是同步的,效率低,ArrayList是不同步的,高效。
2、vecter和ArrayList初始容量都为10,超过10后,vecter100%延长,ArrayList
超过10后50%延长。
vecter特有方法    elemnets()     返回枚举(枚举是vecter的独有取出元素的方法,它共有3种取出方式)
例:
Vecter v = new Vecter();
Enumeration en = v.elements();
while(en.hasMoreElements())
{
    System.out.println(en.nextElement());
}
因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终了。(某IO流用到枚举)

3、Set集合
常用方法:都来自与父类Collection。
特点:元素无序不可重复。
(1)HashSet
底层哈希表实现,存储对象的哈希值。
元素的类必须重写hashCode方法,和equals方法。判断元素是否相同时先判断调用hashCode方法比较哈希值,如哈希值相同再比较equals方法。
(2)TreeSet
底层二叉树实现。小值存左大值存右。
元素的类必须实现Runnable接口重写compareTo方法;或者自定义一个比较器(实现Comparator(util包))将比较器传入TreeSet构造方法。

三、Map集合
Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
Set底层实际上使用了Map集合。 
(1)添加。
put(K key, V value) 
putAll(Map<? extends K,? extends V> m) 
(2)删除。
clear() 
remove(Object key) 
(3)判断。
containsValue(Object value) 
containsKey(Object key) 
isEmpty() 
(4)获取。
get(Object key) 
size() 
values() 

entrySet() 
keySet() 
 
1、Hashtable:
 
底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
 2、HashMap
 底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
3、TreeMap
 
底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

map集合元素的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。

Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。


2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry

Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。
关系属于Map集合中的一个内部事物。
而且该事物在直接访问Map集合中的元素。  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值