------- android培训、java培训、期待与您交流! ----------
- 集合类 2014/5/13 星期二 16:41:39
1.集合的特点
集合只用于存储对象,集合长度是可变的,集合可以存储任意类型的对象
2.集合和数组的区别
集合和数组都是容器,数组虽然也可以存储对象,但长度是固定的,集合长度是可变的;
数组只能存储基本数据类型的,而集合可以存储任意数据类型
ArrayList()集合
1.集合中为什么存储的都是Object对象?
定义为Object类型对象,以达到集合中能存储任意类型对象的目的
2.集合中实际存储的是对象的引用(地址),而不是对象实体
什么是迭代器?
其实就是取出集合元素的一种方式
迭代器Iterator的基本原理
1,把取出方式定义在集合内部,这样就可以直接通过取出方式直接访问集合内部的元素,这样取出方式就被定义为了内部类
2.每个容器的数据结构不同,所以取出的动作细节也不一样,但是,都有共性内容,那就是”判断和取出“,那么可以将其共性内容
进行抽取
3.这些共性内容都符合一个规则,那就是Iterator接口
4.可通过对外提供的一个方法:iterator()来获取集合的取出对象
Collection
--List 元素是有序的,集合中的元素可以重复,因为该集合体系有下标
ArrayList:底层的数据结构使用的数组结构,特点:查询速度很快,增删稍慢,线程不同步。
LinkList:底层的数据结构使用的是链表数据结构,特点:查询速度稍慢,增删很快
Vector:底层使用的是数组数据结构,线程不同步,被ArrayList取代了
--Set 元素是无序的,集合中的元素不可以重复
List的特有方法
凡是可以操作角标的方法都是该集合体系的特有方法
增加
add(index,element)
addAll(index,Collection)
删除
remove(index)
修改
set(index,element)
获取
listIterator()
get(index)
subList(from,to)
List集合特有的迭代器:ListIterator
ListIterator是迭代器Iterator的子接口
1.在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会引发并发修改异常(currentmodifyexecpton)
2.所以在使用迭代器时,只能通过迭代器的方法操作集合元素,但Iterator方法是有限的,只能执行判断(hasNex()),
获取(Next()) 和删除(delete())的操作,
3.故只能通过Iterator的子类接口:ListIterator来执行其他操作。如:添加,修改等
该接口只能通过集合的ListIterator()方法获取
LinkList主要方法
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
早期版本 JDK1.6以后
addFirst()----offerFirst();
addLast()------offerLast();
getFirst()------peekFirst();
getLast()-------peekLast();
removeFirst()-----poolFirst();
removeLast()-------poolLast();
set接口对象
|--set集合:1.元素是无序的(元素的存入和取出顺序是不一致的)。 2.元素不能重复
|--hashSet:底层数据结构是哈希表
hashSet集合是如何保证元素的唯一性的呢?
是通过元素的两个方法:hashCode()和equals()来完成
如果元素的hashCode值相同,才会判断equals是否为True
如果元素的hashCode值不同,则不会调用equals()方法
所以一般情况下,如果要把实体对象存入Set集合中,都需要在该对象的方法覆写hashCode()方法
并比较任意两个对象的equals()
public int hastCode(){
return name.hashCode+age*37;
}
public boolean equals(object obj)
{
if(!(obj instances of Person))
{
return false;
}
Person p=(Person)obj;
return this.name.equals(p.name)&& this.age==p.age
}
注意:对于判断元素是否存在,或是删除等操作,依赖的方法都是hashCode和equals
|--treeSet:可以对Set集合中的元素进行排序
记住:排序时,当主要条件相同时,一定要判断一下次要条件
|-- set的功能和Collection的功能是以致的
Map(和Collection接口同级的接口)集合
1.简述:该集合用于存储键值对,一对一对的往里存,但要保证键的唯一性
2.Map接口的子类对象
|--HashTable:底层是哈希表数据结构,不可以存入null键和null值,线程同步,效率低
|--HashMap:底层是哈希表数据结构,可以存入null键和null值,线程不同步,效率高
|--TreeMap:底层是二叉树数据结构,线程不同步,可以对Map集合中的元素进行排序
和set接口的集合很像,事实上set集合底层就是用了Map集合
3.共性方法
(1)增加
put(Key key,Value value)
putAll(Map<? extends k,? extends v>m)
(2)删除
clear()
remove(Object key)
(3)判断
containsValue(Object value)
containsKey(Object key)
(4)获取
get(Object key)
size()
values()
重要方法
Set<key> keySet():
将Map中的所有键存入到set集合中,因为set具备迭代器
所有通过迭代器方式取出的键,都可通过get()方法来获取对应的值
Set<Map.Entry<K,V>> entrySet():
将Map集合中的所有映射关系存入到set集合中,而这个关系的数据类型就是:Map.Entry
public class MapDemo {
public static void main(String[] args) {
Map<String, String> map=new HashMap<String, String>();
//添加元素时,如果添加的key相同,则key对应的后面的value值会覆盖前面的旧值,并且,put()方法
//会返回原来的旧值,和新添加的新值
/* System.out.println( map.put("01","张三旧值"));
System.out.println( map.put("01","张三新值"));*/
map.put("01","张三");
map.put("02","李四");
map.put("03","王五"); //System.out.println(map);
//将map集合中的映射关系取出,存入到Set集合中
Set<Map.Entry<String, String>> mapEntries=map.entrySet();
Iterator<Map.Entry<String, String>> iterator=mapEntries.iterator();
while(iterator.hasNext())
{
Map.Entry<String, String> meEntry=iterator.next();//获取Set集合中的映射关系
String key=meEntry.getKey();//获取映射关系中的key值
String value=meEntry.getValue();//获取映射关系中的value值
System.out.println(key+" : "+value);
}
// Map.Entry其实也是一个接口,是Map接口中的内部接口
/* //keySet()方法,获取所有的key集合,并存入到set集合中
Set<String> set=map.keySet();
Iterator<String> iterator=set.iterator();
while(iterator.hasNext())
{
String key=iterator.next();
System.out.println("key:"+key+" value: "+map.get(key));
}*/
/* 是否包含指定的键
System.out.println(map.containsKey("02"));
是否包含指定的值
System.out.println(map.containsValue("张三"));
通过key获取value。可以通过get来判断值是否存在
System.out.println(map.get("03"));
获取集合的长度
System.out.println(map.size());
获取集合的所有值
System.out.println(map.values());
通过key删除元素 注意:删除后返回删除成功后的值
System.out.println("remove:"+map.remove("03"));//返回王五
清除集合中的所有元素
map.clear();
System.out.println(map.values());
map.putAll(map2);
System.out.println(map.values());
}
}