黑马程序员--集合框架

----------------------- 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());

              }           

(三)ListSet的特点:

Collection

       |--List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。

       |--Set:元素不能重复,无序

List:特有的常见方法:有一个共性特点就是都可以操作角标。

1List集合中常见的方法:

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集合是可以完成对元素的增删改查

2List常用子类的特点:

       |--Vector:内部是数组数据结构,是同步的的。增、删、查询都很慢!

       |--ArrayList:内部是数组数据结构,是不同步的。代替了Vector。查询速度快(角标)

       |--LinkedList:内部是链表数据结构,是不同步的。增、删元素的速度很快(相连、断开连接)

3LinkedList常用方法:

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集合的构造函数。

6TreeSet集合--二叉树

     根据创建 set 时提供的Comparator进行排序,返回值为1的时候,就是按照有序进行输出;为0的时候,就表示相同;为-1的时候,就是反转输出。

(四)Map集合

1)它和Collection并列,并且都属于接口

2)比较MapCollection区别:

       1Map也称为双列集合,Collection集合称为单列集合

       2Map:一次添加一对元素;Collection:一次添加一个元素

       3Map集合中存储的就是键值对,该集合必须保证键的唯一性。

3)比较MapCollection区别:

       1Map也称为双列集合,Collection集合称为单列集合

       2Map:一次添加一对元素;Collection:一次添加一个元素

       3Map集合中存储的就是键值对,该集合必须保证键的唯一性。

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学习型技术博客、期待与您交流! ----------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值