黑马程序员-集合框架
2012-05-28 10:56
239 查看
---------------------- android培训,java培训、期待与您交流!
----------------------
![](http://my.csdn.net/uploads/201205/28/1338173955_4704.jpg)
![](http://my.csdn.net/uploads/201205/28/1338173940_6705.jpg)
![](http://my.csdn.net/uploads/201205/28/1338173947_3912.jpg)
(上图取自黑马论坛)
集合框架就是一种容器,它和数组有不同:
1.数组是固定长度的,集合框架是可变长度的
2.数组只能存储一种数据类型,集合框架可以存储多种数据类型
集合框架存放在util包里面
集合框架是对象不断向上抽取得到的,顶层是Collection,它是一个接口
集合框架下面还有很多子容器,为什么要有这么多容器呢?那是因为每一个容器对数据的存储方式不同,这个存储方式成为:数据结构
|--ArrayList:底层数据结构使用的是数组结构.特点:查询速度很快,但是增删较慢,线程不同步
|--LinkedList:底层使用的是链表数据结构,特点:增删速度快,查询慢,线程不同步
|--Vector:底层是数组数据结构:线程同步,但是被ArrayList替代了.
|--Set:元素是无序的,不可以存放重复元素
|--HashSet:底层是哈希表结构,值唯一,判断值唯一的方式是:首先判断哈希值是否相同,如果哈希值相同,再判断内容是否相同.
线程不同步
|--TreeSet:底层是二叉树结构,值唯一,可以排序,线程不同步
ArrayList,数组结构,查询快,增删慢,线程不安全,以50%的长度添加:
增:
add(index,element); //在index处添加element
addAll(index,Collection); //在index处添加一个集合
删:
remove(index); //删除index处的元素
改:
set(index,element); //把index处的元素换成element
查:
get(index); //查询index处的元素
indexOf(element); //获取指定元素第一个出现的位置
subList(from,end); //获取从from到end角标的元素,包含头,不包含尾
特别的,重要的:
ListIterator:一个List特有的迭代器,是Iterator的子接口
. 在迭代的时候,不可以通过集合对象(ArrayList中的增删改查)来操作集合中的元素,因为会发生异常,所以在迭代的时候,只能用迭代器自己的方法来操作集合中的元素,但是Iterator中只有判断,取出和删除,如果想要添加,修改等,就需要使用子接口:ListIterator:
ListIterator的特殊操作:
LinkedList:链表结构,增删很快,查询很慢
特有方法:
增:
addFirst( ); //把元素添加到第一位
addLast( ); //把元素添加到最后一位
删:
如果集合中没有元素,会报异常
removeFirst( ) ; //获取并删除第一位
removeLast( ) ; //获取并删除最后一位
获取:
getFirst( ); //获取但不删除第一个元素
getLast( ); //获取但不删除最后一个元素
1.6版本更新后:
增:
offerFirst( ); //把元素添加到第一位
offerLast( ); //把元素添加到最后一位
删:
如果集合中没有元素,返回null
pollFirst( ); //获取并删除第一位
pollLast( ); //获取并删除最后一位
获取:
如果集合中没有元素,返回null
peekFirst( ) ; //获取但不删除第一个元素
peekLast( ) ; //获取但不删除最后一个元素
ArrayList判断元素是否相同,添加,删除等操作都是依赖equals来判断的
HashSet判断元素是否相同,添加,删除等操作是依赖HashCoad和equals来判断的,先判断HashCoad,如果HashCoad相同,再判断equals
TreeSet
可以对Set集合中的元素排序,底层数据结构是二叉树,保证元素唯一性,java提供了一个接口Comparable,专门用于强制使对象具有比较性,需要排序的类实现这个接口,并重写int
compareTo(Object obj),定义自己的排序规则,如果第一个对象大于第二个对象,返回正数;
相同,返回0;小于,返回负数
TreeSet排序有两种方式:
1.
让元素自身具备比较性,元素实现Comparable接口,覆盖comparTo方法,这种方式也称为元素的自然排序或者叫默认排序.
2. TreeSet的Comparator接口:
当元素自身不具备比较性或者比较性不符合需求的时候,这时让容器自身具备比较性,定义一个比较器,实现Comparator接口的Compare方法,并把接口作为参数传给TreeSet的构造函数,当两种比较方法都存在的时候,以比较器为主
|--HashTable
底层是哈希表数据结构,线程同步,键和值都不允许为null,从jdk1.0开始
|--HashMap
底层是哈希表数据结构,线程不同步,键和值都允许为null,从jdk1.2开始
Map集合的共性方法:
增:
put<K key, V value>
putAll<Map <? Extends K , ? entends V> m>
删:
clear();
清空集合
remove(object key);
删除某个键上的值
判断:
isEmpty();
是否为空
containsValue(Object value);
是否包含某个值
containsKey(Object key);
是否包含某个键
获取:
get(Object key);
通过键获取值
size();
获取长度
values();
获取所以元素
entrySet();
keyset(); 获取所有的键,把键存入一个Set集合
添加元素时,如果添加到相同的键,那么后添加的值会覆盖原有键对应的值,但是put方法会返回被覆盖的值
Map集合的两种取出方式(map没有迭代器):
1.
keySet:将map中所有的键存入set集合中,因为set具有迭代器,所有可以迭代方式取出所有的键,再根据get方法获取每个键的值
map <String,String> m=new HashMap< String,String >( );
m.put(“”,””);
m.put(“”,””);
Ser <String> s=map.keySet();
Iterator <String > it=s.iterator();
While(it.hashNext())
{
String key=it.next();
Systm.out.println(m.get(key));
}
2.
entrySet:将map集合中的映射关系存入一个set集合中,这个set集合的类型是Map.
Entry,为什么是这个类型呢?因为entrySet取出的是键值关系,所以既不是键,也不是值,所以自然也不是键或值的类型
Set<Map.Entry<String, String >> entrySet = map . entrySet();
Iterator <Map.Entry< String, String >> it= entrySet . iterator();
While(it . hasNext()){
Map.Entry< String, String > me= it .next();
String key=me. getKey();
String value= me . getValue();
}
ArrayList:底层是数据结构是线性表(数组)结构,查找快,插入和删除慢,不同步,每次数组长度增加50%
LinkedList:底层数据结构是链表,查找慢,插入和删除较快。不同步
vector:跟ArrayList一样,被ArrayLis所取代。同步,
每次数组长度增加100%
HashSet:底层数据结构是哈希表,线程不同步;元素不重复,无序
TreeSet:可以对set集合的元素进行排序。底层数据机构是二叉树,线程不同步。
Collection:集合接口,不能直接实例化对象,需要要用多态来实例化对象。
Collections:集合工具类。能够减少代码的书写量。
HashTable:底层数据机构是哈希表,不允许存放null Key和null Value。线程同步,效率低。
HashMap:底层数据机构是哈希表,允许存放null Key和null value。线程不同步,效率高。
collection:存放一组单值元素
Map:以键值对形式存放元素
----------------------
android培训,java培训、期待与您交流!
----------------------
详细请查看http://edu.csdn.net/heima
----------------------
集合框架:
![](http://my.csdn.net/uploads/201205/28/1338173955_4704.jpg)
![](http://my.csdn.net/uploads/201205/28/1338173940_6705.jpg)
![](http://my.csdn.net/uploads/201205/28/1338173947_3912.jpg)
(上图取自黑马论坛)
集合框架就是一种容器,它和数组有不同:
1.数组是固定长度的,集合框架是可变长度的
2.数组只能存储一种数据类型,集合框架可以存储多种数据类型
集合框架存放在util包里面
集合框架是对象不断向上抽取得到的,顶层是Collection,它是一个接口
集合框架下面还有很多子容器,为什么要有这么多容器呢?那是因为每一个容器对数据的存储方式不同,这个存储方式成为:数据结构
Collection
|--List:元素师有序的(有角标),元素可以重复|--ArrayList:底层数据结构使用的是数组结构.特点:查询速度很快,但是增删较慢,线程不同步
|--LinkedList:底层使用的是链表数据结构,特点:增删速度快,查询慢,线程不同步
|--Vector:底层是数组数据结构:线程同步,但是被ArrayList替代了.
|--Set:元素是无序的,不可以存放重复元素
|--HashSet:底层是哈希表结构,值唯一,判断值唯一的方式是:首先判断哈希值是否相同,如果哈希值相同,再判断内容是否相同.
线程不同步
|--TreeSet:底层是二叉树结构,值唯一,可以排序,线程不同步
List:
特有方法:凡是可以操作角标的方法都是该体系特有的方法ArrayList,数组结构,查询快,增删慢,线程不安全,以50%的长度添加:
增:
add(index,element); //在index处添加element
addAll(index,Collection); //在index处添加一个集合
删:
remove(index); //删除index处的元素
改:
set(index,element); //把index处的元素换成element
查:
get(index); //查询index处的元素
indexOf(element); //获取指定元素第一个出现的位置
subList(from,end); //获取从from到end角标的元素,包含头,不包含尾
特别的,重要的:
ListIterator:一个List特有的迭代器,是Iterator的子接口
. 在迭代的时候,不可以通过集合对象(ArrayList中的增删改查)来操作集合中的元素,因为会发生异常,所以在迭代的时候,只能用迭代器自己的方法来操作集合中的元素,但是Iterator中只有判断,取出和删除,如果想要添加,修改等,就需要使用子接口:ListIterator:
ListIterator的特殊操作:
LinkedList:链表结构,增删很快,查询很慢
特有方法:
增:
addFirst( ); //把元素添加到第一位
addLast( ); //把元素添加到最后一位
删:
如果集合中没有元素,会报异常
removeFirst( ) ; //获取并删除第一位
removeLast( ) ; //获取并删除最后一位
获取:
getFirst( ); //获取但不删除第一个元素
getLast( ); //获取但不删除最后一个元素
1.6版本更新后:
增:
offerFirst( ); //把元素添加到第一位
offerLast( ); //把元素添加到最后一位
删:
如果集合中没有元素,返回null
pollFirst( ); //获取并删除第一位
pollLast( ); //获取并删除最后一位
获取:
如果集合中没有元素,返回null
peekFirst( ) ; //获取但不删除第一个元素
peekLast( ) ; //获取但不删除最后一个元素
Set集合
Set集合是无序的,存储的顺序和取出的顺序在内存中时不确定的,因为它的数据结构是哈希结构,在内存中存放的顺序是按哈希表的顺序.如果两个元素的哈希值相同,jvm就判断它们的具体值是否相同,如果相同,就不在存储,如果不相同,则一个哈希地址对应ArrayList判断元素是否相同,添加,删除等操作都是依赖equals来判断的
HashSet判断元素是否相同,添加,删除等操作是依赖HashCoad和equals来判断的,先判断HashCoad,如果HashCoad相同,再判断equals
TreeSet
可以对Set集合中的元素排序,底层数据结构是二叉树,保证元素唯一性,java提供了一个接口Comparable,专门用于强制使对象具有比较性,需要排序的类实现这个接口,并重写int
compareTo(Object obj),定义自己的排序规则,如果第一个对象大于第二个对象,返回正数;
相同,返回0;小于,返回负数
TreeSet排序有两种方式:
1.
让元素自身具备比较性,元素实现Comparable接口,覆盖comparTo方法,这种方式也称为元素的自然排序或者叫默认排序.
2. TreeSet的Comparator接口:
当元素自身不具备比较性或者比较性不符合需求的时候,这时让容器自身具备比较性,定义一个比较器,实现Comparator接口的Compare方法,并把接口作为参数传给TreeSet的构造函数,当两种比较方法都存在的时候,以比较器为主
Map:
Map集合是一种键值对应的集合,一个值只能对映一个键.|--HashTable
底层是哈希表数据结构,线程同步,键和值都不允许为null,从jdk1.0开始
|--HashMap
底层是哈希表数据结构,线程不同步,键和值都允许为null,从jdk1.2开始
Map集合的共性方法:
增:
put<K key, V value>
putAll<Map <? Extends K , ? entends V> m>
删:
clear();
清空集合
remove(object key);
删除某个键上的值
判断:
isEmpty();
是否为空
containsValue(Object value);
是否包含某个值
containsKey(Object key);
是否包含某个键
获取:
get(Object key);
通过键获取值
size();
获取长度
values();
获取所以元素
entrySet();
keyset(); 获取所有的键,把键存入一个Set集合
添加元素时,如果添加到相同的键,那么后添加的值会覆盖原有键对应的值,但是put方法会返回被覆盖的值
Map集合的两种取出方式(map没有迭代器):
1.
keySet:将map中所有的键存入set集合中,因为set具有迭代器,所有可以迭代方式取出所有的键,再根据get方法获取每个键的值
map <String,String> m=new HashMap< String,String >( );
m.put(“”,””);
m.put(“”,””);
Ser <String> s=map.keySet();
Iterator <String > it=s.iterator();
While(it.hashNext())
{
String key=it.next();
Systm.out.println(m.get(key));
}
2.
entrySet:将map集合中的映射关系存入一个set集合中,这个set集合的类型是Map.
Entry,为什么是这个类型呢?因为entrySet取出的是键值关系,所以既不是键,也不是值,所以自然也不是键或值的类型
Set<Map.Entry<String, String >> entrySet = map . entrySet();
Iterator <Map.Entry< String, String >> it= entrySet . iterator();
While(it . hasNext()){
Map.Entry< String, String > me= it .next();
String key=me. getKey();
String value= me . getValue();
}
ArrayList:底层是数据结构是线性表(数组)结构,查找快,插入和删除慢,不同步,每次数组长度增加50%
LinkedList:底层数据结构是链表,查找慢,插入和删除较快。不同步
vector:跟ArrayList一样,被ArrayLis所取代。同步,
每次数组长度增加100%
HashSet:底层数据结构是哈希表,线程不同步;元素不重复,无序
TreeSet:可以对set集合的元素进行排序。底层数据机构是二叉树,线程不同步。
Collection:集合接口,不能直接实例化对象,需要要用多态来实例化对象。
Collections:集合工具类。能够减少代码的书写量。
HashTable:底层数据机构是哈希表,不允许存放null Key和null Value。线程同步,效率低。
HashMap:底层数据机构是哈希表,允许存放null Key和null value。线程不同步,效率高。
collection:存放一组单值元素
Map:以键值对形式存放元素
----------------------
android培训,java培训、期待与您交流!
----------------------
详细请查看http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员 集合框架
- 黑马程序员——集合框架工具类
- 【黑马程序员】集合框架(二)泛型 第十六天
- 黑马程序员—集合框架Collection接口与List接口
- 黑马程序员 java学习笔记——集合框架1
- 黑马程序员——Java基础—集合框架(一)
- 黑马程序员_java基础学习笔记06_集合框架
- 黑马程序员——Java要点笔记——集合框架(Set)
- 黑马程序员-JAVA基础之集合框架
- 黑马程序员——集合框架
- 黑马程序员-5-java-Collection集合类知识串讲(4)-集合框架工具类Utilities
- 黑马程序员___13java基础 集合框架 LIST和SET集合
- 黑马程序员——集合框架1:体系框架
- 【黑马程序员】集合框架和自定义集合
- 黑马程序员_java_集合框架_Collection_List_Set_Map_泛型
- 黑马程序员_集合框架(一)
- 黑马程序员--集合框架
- 黑马程序员_java编程基础16 集合框架2
- 黑马程序员——java第十四、五、六天:集合框架(一:Collection、Map)
- 黑马程序员_OCFoundation框架中的集合类