黑马程序员----------集合框架

------- 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()相同

好处:限定了对集合中的元素的增删操作,只能获取这些集合

 

 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值