Java培训-集合

  1. 集合框架体系结构

091813238311297.png

  1. 集合框架体系结构图解释:

    虚点框:代表接口,虚线框:代表抽象接口,实线框:代表实现接口的类

  2. Collection和collections的区别:

    Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线
    程安全化等操作。

  3. Map常用子类

    Hashtable:哈希表,是同步的,不允许null键和null值

    HashMap:哈希表,是不同步的,允许null键和null值

    TreeMap:二叉树,不同步,可以对Map集合中的键进行排序

  4. Collection接口常用子类Set和List:

    Set:不记录元素的保存顺序,且不允许有重复数据

    List:记录元素的保存顺序,且允许有重复数据。

  5. ArrayList,Vector, LinkedList的存储性能和特性

    ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元 素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差, 而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

  6. ArrayList:利用数组实现,解决了数组中定长到变长,类型多样化的问题。

    Iterator:迭代器接口  方法:hasNext() 判断迭代器中是否有值,next() 取某一个值并将指针移动到下一个单

  7. 总结:

        如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
         如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
         要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
         尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

  8. 取ArrayList中的值:

public static void test1(){
        ArrayList aList=new ArrayList();
        aList.add(5);
        aList.add(2);
        aList.add(0);
        aList.add("我");
        aList.add('a');
        //for循环取值
        for (int i = 0; i < aList.size(); i++) {
            Object obj=aList.get(i);
            System.out.println(obj);
        }
        //iterator迭代器取值
        Iterator it=aList.iterator();
        while(it.hasNext()){
            Object obj=it.next();
        }
        //迭代器加for循环取值
        for (Iterator iterator = aList.iterator(); iterator.hasNext();) {
            Object object =iterator.next();
             
        }
    }

10.取Map集合中的键值对:Key键用Set集合存储,value用collection集合存储,键值对用Set集合存储

public static void putElements(){
        hashMap.put("huang", "ming");
        hashMap.put("chao", "sheng");
        hashMap.put("shi", "tian");
        int size=hashMap.size();
        System.out.println("size="+size);
    }
    //key set集合
    public static void getKey(){
        Set keyset=hashMap.keySet();
        Iterator it=keyset.iterator();
        while(it.hasNext()){
            Object key=it.next();
            System.out.println("keys="+key);
        }
    }
    //value collection接口
    public static void getValues(){
        Collection coll=hashMap.values();
        Iterator it=coll.iterator();
        for (Iterator iterator = coll.iterator(); iterator.hasNext();) {
            Object value = iterator.next();
            System.out.println("values="+value);
        }
    }
    //key-value entrySet集合
    public static void getKV(){
        //方式一  增强for循环获取
        for(Object obj:hashMap.entrySet()){
            Entry entry=(Entry) obj;
            Object key=entry.getKey();
            Object value=entry.getValue();
            System.out.println("key="+key+";value="+value);
        }
         
        //方式二 通过Key获取Value
        for(Object obj:hashMap.keySet()){
            Object key=obj;
            Object value=hashMap.get(obj);
            System.out.println("key="+key+";value="+value);
        }
         
        //方式三 通过内部类Entry获取key和value
        Set entrySet=hashMap.entrySet();
        Iterator it=entrySet.iterator();
        while(it.hasNext()){
            Entry entry=(Entry) it.next();
            Object key=entry.getKey();
            Object value=entry.getValue();
            System.out.println("key="+key+";value="+value);
        }
    }

11.Stack类:

//出栈进栈
    public static void test(){
        Stack stack=new Stack();
        stack.add("apple");
        stack.add("banana");
        stack.add(123);
        stack.add(new Date());
         
        Iterator it=stack.iterator();
        while(it.hasNext()){
            Object obj=it.next();
            System.out.println(obj);
        }
        //peek方法是取值,不会改变栈的大小
        Object peekObj=stack.peek();
        System.out.println("peekObj:"+peekObj);
        System.out.println("peek after:"+stack.size());
        //pop方法将最后一个值弹出,栈的大小改变
        Object popObj=stack.pop();
        System.out.println("popObj:"+popObj);
        System.out.println("pop after:"+stack.size());
         
    }

12.统计输入的语句中每个字符的个数:

public static void countChar(){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入需统计的语句:");
        String s=sc.next();
        try {
            //先用GBK将字符解码,然后用UTF-8将字符串加码。
            s = new String(s.getBytes("GBK"), "utf-8");
            System.out.println(s);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        char[] c=s.toCharArray();
        Map<Character,Integer> map=new TreeMap<Character,Integer>();
        for (int i = 0; i < c.length; i++) {
            if(!(map.containsKey(c[i]))){
                map.put(c[i], 1);
            }else{
                map.put(c[i], map.get(c[i])+1);
            }
        }
         
        for(Object obj:map.entrySet()){
            Entry entry=(Entry) obj;
            Object key=entry.getKey();
            Object value=entry.getValue();
            System.out.println(key+"="+value);
        }
    }


你可能感兴趣的:(vector,二叉树,null,java培训,结构图)