------- android培训、java培训、期待与您交流! ----------
集合框架:用于存储的容器
特点:集合用于存储对象,集合的长度是可变的
集合和数组的区别:
数组长度不可变,集合的长度是可变的
数组可以存储基本数据类型,集合存储的是对象
数组只能存储相同的数据类型,集合可以存储不同的数据类型
集合再不断的向上抽取,就形成了集合体系
集合体系顶层是collection接口
Collection接口
Collection基本方法
Collectioncoll=new ArrayList();
添加:coll.add(“abc”);coll.addAll();
删除:coll.clear()删除所有 coll.remove()
判断:booleanb=c1.containsAll(c2)判断c1中是否包含c2
获取:coll.size()获取集合中元素个数
将集合变成一个数组 toArray
Iterator接口
迭代器:是一个接口,用于取出集合中的元素
Collectioncoll=new ArrayList();
coll.add("abc");
coll.add("bcd");
取出方式一
Iteratorit=coll.iterator
While(it.hasNext){syso(it.next;)}
方式二
for(Iteratorit=coll.iterator;it.hasNext()){syso(it.next);}
List接口:collection的子接口,具备collection的所有方法
List:有序,有索引,可以重复
|--ArrayList:底层结构是数组,线程不同步,查询快
|--linkedList:底层结构是链表结构,线程不同步,增删快
List支持对元素的增删改查
当迭代过程中使用了集合的同时对元素进行操作,导致了迭代的不确定性,解决方法为listIterator接口进行迭代
取出list集合中元素
For(intx=0;x<list.size();x++){syso(list.get(x));}
List集合判断底层元素是否相同,其实都是用元素的自身的equals方法来完成的
Linkedlist:链表式集合
特有方法:addFrist:每添加一个都是在原元素前添加
addLast
getFrist:获取第一个元素
getLast
getRemove:获取第一个元素,并删除
set接口:set方法和collection中的方法一致,获取set集合的方法只有迭代
hashSet:底层数据时哈希表,线程不同步,无序,高效
hashSet保证元素的唯一性:通过元素的hashcode方法,和equals方法
如果hashcode的方法相同,就判断equals方法,如果equals方法相同,就不存,如果相同就存储
TreeSet:二叉树结构,对set集合中的元素进行指定顺序的排序,线程不同步
哈希表的原理:对对象中的元素进行哈希运算,并得到一个算法值,即哈希值
将哈希值存储到集合中,如果哈希冲突出现,再次判断对象是否相同,如果相同,就不存储,如果不同,就存储,在原来的哈希基础上+1顺延
存储哈希值得结构,就是哈希表
哈希表是根据哈希值存储的,为了提高效率,就要保证对象关键字的唯一性
对于ArrayList,判断元素是否存在根据的是equals方法
对于HashSet,判断元素是否存在根据的是hashcode方法和equals方法
TreeSet:对指定set集合元素进行指定顺序的排序,排序的前提是元素具有比较性
如果不具有比较小,就会抛出异常
TreeSet保证元素的唯一性的方式:就是判断比较方法的结果是否为零,return=0视为两个元素相同,不存
TreeSet集合的排序有两种方式comparable和comparator
让元素具有比较性,需要元素对象实现comparable,覆盖comparTo方法
让元素具有比较性,需要定义一个实现comparator接口的比较器,并覆盖conpare方法,并将该对象作为实际参数传递给set集合的构造函数
Map集合:键值对,双列集合
Hashtable:底层是哈希表结构,线程同步的,不能存储null键,null值
Hashmap:底层是哈希表结构,线程不同步的,能存储null键,null值
TreeMap:底层是二叉树结构,可以对元素进行指定顺序的排列
Map集合和collection不同,conllection存储的是一个元素,map集合存储的是一对元素
Map集合时双列集合,键和值是映射的关系,collection是单列集合
特点是:保证map集合中的键的唯一性
Mapmap=new HashMap();
添加:map.put(key,value),当重新写入key值时,会覆盖以前的key值,并将之间的value返回
删除:map.clear();清除所有,map.remove(key)清除指定位置的值
判断:boolean类型,map.isEmpty判断是否为空,map.containsKey判断是否包含键
取出:int len=map.size(); 返回长度 String value=map.get(key)通过键获取值
如何获取map集合中所有的元素:
Map集合时没有迭代器的,而collection集合有,而且map集合是没有重复的,所以将map集合转成set集合,在用迭代获取其中的元素
获取map集合的三种方法
方法一:keySet 通过键获取值泛型为键的类型
Set keyset=map.keySet();
for(Iteratorit=keyset.iterator;it.hasNext()){
String key=it.next();Stringvalue=map.get(key);
}
方式二:map集合中的EntryMap,泛型为键和值得类型
Set<key的类型,value的类型>entryset=Map.EntrySet<String,String>();
For(Iterator<String,String> it=entryset.iterator;it.hasNext()){
Map.EntrySet<String,String>me=it.next();
String key=me.getkey();
String value=me.getValue();}
方式三:value,但是只能获取值
Collection<String>coll=Map.value();
for(Iteratorit=value.iterator;it.hasNext()){
String value=it.next();
}
集合使用技巧:
ArrayList:底层是数组结构,有角标,线程不同步,查询快
LinkedList:底层是链表结构,线程不同步,增删快
HashSet:底层是哈希表结构,线程不同步,无序,无重复
TreeSet:底层是二叉树接,线程不同步,可以对元素指定顺序的排序,无重复
HashMap:底层的哈希表结构,线程不同步,可以存储null值,null键
TreeMap:底层是二叉树结构,可以对键值进行有序的排序
两种排序方式:
自然排序:实现comparable接口并覆盖conparTo方法
自定义比较器:实现comparator接口并覆盖compare方法
LinkedHashSet、linkedHashMap可以实现有序的存入和输出
Collections:提供了更多的功能,内部都是静态方法
Collections.sort(list)对list进行自然排序
Collections.sort(list,newcompartorByLen())//按照指定比较器比较
ClasscompartorBylen implement comparator<String>{
Public int compare(String1,String2){
Int temp=s1.length()-s2.length();
Return temp==0?s1.comparTo(s2):temp;
}}
Collections.max(list);获取集合中的最大值
Collections.reverseOrder();逆向反转排序
经非同步的集合转成同步集合xxxsynchronizedxxx(xxx)
ListsynchronizedList(list)
Arrays:用于操作数组的工具类,里面都是静态方法
asList():将数组转成集合
String[]arr{};List<String> list=arrays.asList(arr);
将数组转成集合是由局限性的:数组长度不可变,所有集合中可以改变长度的方法不能使用。如果数组中存储的是基本数据类型,变成集合后会将数组实体作为集合元素存在。
toArray():将集合转成数组
String[]arr=list.toArray()
在传递指定类型数组时,最好的方式是指定数组长度和size()相同
好处:限定了对集合中的元素的增删操作,只能获取这些集合