首页 > 其他 > 详细

集合类概述

时间:2017-01-01 21:28:18      阅读:146      评论:0      收藏:0      [点我收藏+]

常用集合的继承关系如下图所示:

技术分享

其中我们常用的就是Collection接口中的Ste接口和List接口。其中最常用的就是ArrayList和LinkedList。

注意:Map、Collection以及其中的Ste和List都是接口,都是不可以被实例化的!

1.Map(映射)

Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

a.Map集合中的键对象不允许重复,也就说,任意两个键对象通过equals()方法比较的结果都是false.,但是可以将任意多个键独享映射到同一个值对象上。 

b.Map接口中又分Hasmap和Treemap,他们都是Map接口下的具象class是可以被实例化的

HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显着提高性能。

TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在 于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。 

Map的常用方法:

package com.inba.maya.JiHe;

import java.util.*;


public class Test {

    //Map接口的常用用法! 在Map接口中没有实现Iterator迭代器!
    public static void main1(String[] args) {
        Map<String,String> map=new HashMap<String,String>();
        //添加数据
        map.put("张三", "张三的歌");
        map.put("李四", "李四的歌");
        map.put("王五", "王五的歌");
        map.put("赵六", "赵六的歌");
        map.put("周七", "周七的歌");
        
        //获得key是张三的values值;
        String s=map.get("张三");
        System.out.println(s);
        
        //获得map中所有的key对象组成的Set集合
        Object obj=map.keySet();
        System.out.println(obj);
        
        //获得map中所有的值对象组成的Collection集合
        System.out.println(map.values());
        
        //获得map的集合大小
        System.out.println(map.size());
        
        //是否有key是张三的键,是就返回true,不是就返回false
        System.out.println(map.containsKey("张三"));
        
        //是否有key是王五的歌的值,是就返回true,不是就返回false
        System.out.println(map.containsValue("王五的歌"));
        
        //移除键是王五的键
        map.remove("王五");
        System.out.println(map.keySet()+"*****"+map.values());
        
        //移除所有
        map.clear();
        System.out.println(map.size());
    }

}

打印出来对应的效果:

技术分享

二:

List接口中社和于自身的方法都与索引有关。因此可以通过对象的索引来操作对象。

List:次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推 荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元 素。 

List接口下分:

ArrayList:由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历 ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。 

LinkedList :对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方 法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

List接口的常用方法:

package com.inba.maya.JiHe;

import java.util.*;


public class Test {
    //Collection接口下List接口的常用方法!
    public static void main(String[] args){
        List<String> list=new ArrayList<String>();//ArryList
        //添加数据add(obj);
        list.add("吕布");
        list.add("典韦");
        list.add("赵云");
        list.add("关羽");
        list.add("马超");
        list.add("张飞");
        //获得list的集合大小
        System.out.println(list.size());
        
        //用来获得一个包中的所有对象,
        Iterator<String> it=list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        
        //获得序列号是0.1.2的对象
        System.out.println(list.get(0)+"**"+list.get(1)+"**"+list.get(2));
        
        //指定添加的位置
        list.add(1, "我添加的放在了下标为1的位置");
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        
        //移除指定位置的对象
        list.remove(0);
        System.out.println(list.get(0));
        
        //替换指定位置的对象
        list.set(0, "替换了");
        System.out.println(list.get(0));
        
        //
        Iterator<String> it2=list.iterator();
        while(it2.hasNext()){
            System.out.println(it2.next());
        }
        
    }

}

效果图:

技术分享

三:迭代器

Iterator接口位于java.util包下,Iterator接口中有单个方法。

hsaNext():如果仍有元素可以迭代那么返回true,反之返回false。常用于是for循环中的判断条件

next:返回迭代的下一个元素。

remove():从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)

除了Iterator可以实现遍历之外,还有一个更强大的ListIterator,它可以实现逆序遍历列表中的元素,示例如下:

package com.inba.maya.JiHe;

import java.util.*;


public class Test {

    public static void main(String[] args){
        List<String> list=new ArrayList<String>();//ArryList
        //添加数据add(obj);
        list.add("吕布");
        list.add("典韦");
        list.add("赵云");
        list.add("关羽");
        list.add("马超");
        list.add("张飞");
     //正序排列
        Iterator<String> it2=list.iterator();
        while(it2.hasNext()){
            System.out.println(it2.next());
        }
        //倒序排列
        ListIterator<String> it3=list.listIterator();
        while(it3.hasNext()){
            it3.next();
        }
        
        while(it3.hasPrevious()){
            System.out.println(it3.previous());
        }
        
    }

}

效果图:

技术分享

总结:

Collection
 --List:将以特定次序存储元素。
           --ArrayList / LinkedList / Vector
 --Set : 不能含有重复的元素,自行排序
           --HashSet / TreeSet
Map
 --HashMap
 --HashTable
 --TreeMap

 

集合类概述

原文:http://www.cnblogs.com/AnswerTheQuestion/p/6241478.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!