`

黑马程序员——集合总结

 
阅读更多

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

 

  • 大小: 18.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics