----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
集合框架
(一)概述:
(1)集合的由来:对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储(容器存储的是对象的地址)。
(2)集合特点:
1,用于存储对象的容器
2,集合的长度是可变的
3,集合中不可以存储基本数据类型值(注意:数组是可以存储的)
(3)集合框架:集合容器因为内部的数据结构不同,有多种具体容器,不断的向上抽取,就形成了集合框架。框架的顶层Collection接口。
(二)Collection的常见方法:
1,添加:
booleanadd(Object obj);
booleanaddAll(Collection coll);
2,删除:
booleanremove(Object obj);
booleanremoveAll(Collection coll);(将两个集合中的相同元素从调用removeAll的集合中删除)
voidclear();
3,判断:
booleancontains(Object obj);
booleancontainsAll(Collection coll);
booleanisEmpty();判断集合中是否有元素
4,获取:
intsize();
Iteratoriterator(); 取出集合元素的方式:迭代器
5,其他:
booleanretainAll(Collection coll);取交集(保留和指定的集合相同的元素,而删除不同的元素(和removeAll功能相反))
Object[] toArray():将集合转成数组
(5)迭代器(取出集合中的方式):
迭代器原理:该对象必须依赖于具体容器,因为每一个容器的数据结构都不相同,所以该迭代器对象是在容器中进行内部实现的。对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现迭代器的对象即可,也就是说:iterator方法。iterator接口就是对所有Collection容器进行元素取出的公共接口。如:我们可以通过使用Collection中的iterator()方法调用集合中的迭代器方法,是为了获取集合中的的迭代器对象。
for(Iteratorit=coll.iterator();it.hasNext();){//开发中常用
System.out.println(it.next());
}
(三)List和Set的特点:
Collection:
|--List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
|--Set:元素不能重复,无序
List:特有的常见方法:有一个共性特点就是都可以操作角标。
(1)List集合中常见的方法:
1,添加:
voidadd(index,element);
voidadd(index,collection);
2,删除:
Objectremove(index);
3,修改:
Objectset(index,element);
4,获取:
Objectget(index);
intindexOf(object);
intlastIndexOf(object);
ListsubList(int fromIndex, int toIndex);//包含头,不包含尾
总结:List集合是可以完成对元素的增删改查
(2)List常用子类的特点:
|--Vector:内部是数组数据结构,是同步的的。增、删、查询都很慢!
|--ArrayList:内部是数组数据结构,是不同步的。代替了Vector。查询速度快(角标)
|--LinkedList:内部是链表数据结构,是不同步的。增、删元素的速度很快(相连、断开连接)
(3)LinkedList常用方法:
addFirst();
addLast();
jdk1.6
offerFirst();
offerLast();
getFirst();//获取但不移除,若果链表为空,抛出NoSuchElementException
getLast();
jdk1.6
peekFirst();//获取但不移除,如果链表为空,返回null
peekLast();
removeFirst();//获取并移除,如果链表为空,抛出NoSuchElementException
removeLast();
jdk1.6
pollFirst();//获取并移除,如果链表为空,返回null
pollLast();
(4)集合框架--HashSet集合
Set接口中的方法和Collection一致。
|--HashSet:内容数据结果是哈希表,是不同步的
|--TreeSet:使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的Comparator进行排序,具体取决于使用的构造方法。
哈希表确定元素是否相同:
1,判断的是两个元素的哈希值是否相同,如果相同,再判断两个对象的内容是否相同
2,判断哈希值相同,其实判断的是对象的hashCode的方法,判断的内容相同,用是equals方法
注意:如果哈希值不同,是不需要判断equals方法的。
哈希算法提高了效率,但是有弊端就是不能重复。
(5)集合框架--TreeSet集合
特点:可以对 Set集合中的元素按照字典的顺序进行排序(不同步的)。
判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,如果是0表示相同元素
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,就需要实现Comparable接口,覆盖compareto方法。
问题:如果不要安装对象中具备的自然顺序进行排序,如果对象中不具备自然排序,怎么办?
可以使用TreeSet集合第二种排序方式二:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法,
将该类对象作为参数传递给TreeSet集合的构造函数。
(6)TreeSet集合--二叉树
根据创建 set 时提供的Comparator进行排序,返回值为1的时候,就是按照有序进行输出;为0的时候,就表示相同;为-1的时候,就是反转输出。
(四)Map集合
(1)它和Collection并列,并且都属于接口
(2)比较Map和Collection区别:
1,Map也称为双列集合,Collection集合称为单列集合
2,Map:一次添加一对元素;Collection:一次添加一个元素
3,Map集合中存储的就是键值对,该集合必须保证键的唯一性。
(3)比较Map和Collection区别:
1,Map也称为双列集合,Collection集合称为单列集合
2,Map:一次添加一对元素;Collection:一次添加一个元素
3,Map集合中存储的就是键值对,该集合必须保证键的唯一性。
(4)常用方法:
1,添加
valueput(key,value):返回前一个和key关联的值,如果没有返回null。
2,删除
voidclear():清空map集合
valueremove(key):根据指定的key翻出这个键值对
3,判断
booleancontainsKey(key):
booleancontainsValue(value):
booleanisEmpty();
4,获取
valueget(key):通过键获取值,如果没有该键返回null
当然,可以通过返回null,来判断是否包含指定键
intsize():获取键值对的个数。
(5)当我们向Map集合中输入较多的元素的时候,那么如何才能做到一次性全部取出呢?
方法一:通过keySet方法获取map中所有的键所在的Set集合,再通过Set的迭代器获取到每一个键再对每一个键通过map集合的get方法获取其对应的值即可
Set<Integer> keySet=map.keySet();
for(Iterator<Integer>it=keySet.iterator();it.hasNext();){
Integer key=it.next();
String value=map.get(7);
System.out.println(key+":"+value);
}
方法二:通过Map转成set就可以迭代了,找到了另一方法:entrySet
该方法将键和值的映射关系作为对象存储到了Set集合中,而这个
映射关系的类型就是Map.Entry类型
Set<Map.Entry<Integer, String>> entrySet=map.entrySet();
Iterator<Map.Entry<Integer,String>> it=entrySet.iterator();
while(it.hasNext()){
Map.Entry<Integer,String> me=it.next();
Integerkey=me.getKey();
Stringvalue=me.getValue();
System.out.println(key+"::::"+value);
}
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------