美文网首页
Java集合类(一)

Java集合类(一)

作者: 一杯清凉的水 | 来源:发表于2017-09-17 16:37 被阅读0次

    借鉴原文出处 liujiacai(@jiacai2050)


    集合框架

    (collections framework)

    首先要明确,集合代表了一组对象(和数组一样,但数组长度不能变,而集合能)。Java中的集合框架定义了一套规范,用来表示、操作集合,使具体操作与实现细节解耦。

    其实说白了,可以把一个集合看成一个微型数据库,操作不外乎“增删改查”四种操作,我们在学习使用一个具体的集合类时,需要把这四个操作的时空复杂度弄清楚了,基本上就可以说掌握这个类了。


    设计理念

    主要理念用一句话概括就是:提供一套“小而美”的API。API需要对程序员友好,增加新功能时能让程序员们快速上手。

    为了保证核心接口足够小,最顶层的接口(也就是Collection与Map接口)并不会区分该集合是否可变(mutability),是否可更改(modifiability),是否可改变大小(resizability)这些细微的差别。
    相反,一些操作是可选的,在实现时抛出UnsupportedOperationException即可表示集合不支持该操作。集合的实现者必须在文档中声明那些操作是不支持的。

    为了保证最顶层的核心接口足够小,它们只能包含下面情况下的方法:

    基本操作,像之前说的“增删改查”
    There is a compelling performance reason why an important implementation would want to override it.
    此外,所有的集合类都必须能提供友好的交互操作,这包括没有继承Collection类的数组对象。因此,框架提供一套方法,让集合类与数组可以相互转化,并且可以把Map看作成集合。


    两大基类Collection与Map

    在集合框架的类继承体系中,最顶层有两个接口:

      Collection表示一组纯数据
      Map表示一组key-value对
    

    一般继承自Collection或Map的集合类,会提供两个“标准”的构造函数:

      没有参数的构造函数,创建一个空的集合类
      有一个类型与基类(Collection或Map)相同的构造函数,创建一个与给定参数具有相同元素的新集合类
    

    因为接口中不能包含构造函数,所以上面这两个构造函数的约定并不是强制性的,但是在目前的集合框架中,所有继承自Collection或Map的子类都遵循这一约定。


    关系图

    Collection.jpg

    如上图所示,Collection类主要有三个接口:

    Set

    表示不允许有重复元素的集合(A collection that contains no duplicate elements)

    List

    表示允许有重复元素的集合(An ordered collection (also known as a sequence))

    Queue

    JDK1.5新增,与上面两个集合类主要是的区分在于Queue
    主要用于存储数据,而不是处理数据。(A collection designed for holding elements prior to processing.)

    Map.jpg

    Map并不是一个真正意义上的集合(are not true collections),但是这个接口提供了三种“集合视角”(collection views ),使得可以像操作集合一样操作它们,具体如下:
    把map的内容看作key的集合(map’s contents to be viewed as a set of keys)
    把map的内容看作value的集合(map’s contents to be viewed as a collection of values)
    把map的内容看作key-value映射的集合(map’s contents to be viewed as a set of key-value mappings)


    集合类型主要有3种:Set(集)、List(列表)和Map(映射)。

    1.Collection接口:

    package com.zang.collection;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class Collection_{
        public static void main(String[] args) {
            
            Collection<String> list=new ArrayList<>();
            
            list.add("Tsthzang");
            list.add("Android");
            list.add("Iterator");
            
            Iterator<String> it=list.iterator();
            while(it.hasNext()) {
                String str=it.next();
                System.out.println(str);
            }
            
        }
    }
    

    运行结果:

      Tsthzang
      Android
      Iterator
    

    2.List 集合:

    package com.zang.list;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class List_ {
    
    public static void main(String[] args) {
        
        List<String> list=new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
        int i=(int)(Math.random()*(list.size()-1));
        System.out.println("随机数:"+list.get(i));
        
        list.remove(0);
        list.set(3, "change");
        
        System.out.println("遍历list集合1:");
        for(int c=0;c<list.size();c++) {
            System.out.println(list.get(c));
        }
        
        System.out.println("遍历list集合2:");
        Iterator<String> it=list.iterator();
        while(it.hasNext()) {
            String str=it.next();
            System.out.println(str);
        }
        System.out.println("是否为空:"+list.isEmpty());
      }
    
    }
    

    运行结果:

    随机数:c
    遍历list集合1:
    b
    c
    d
    change
    遍历list集合2:
    b
    c
    d
    change
    是否为空:false
    

    3.Map 集合:

    (一)

    package com.zang.map;
    
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    public class Map_ {
    
    public static void main(String[] args) {
        
        Map<Object,String> map=new HashMap<>();
        map.put(1,"小米");
        map.put(2,"苹果");
        map.put(3,"谷歌");
    
        System.out.println(map.get(1));
        
        //返回map中   所有key对象   形成的Set集合
        Set<Object> set=map.keySet();
        Iterator<Object> it=set.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
        //返回map中   所有 值 对象   形成的Collection集合
        Collection<String> collection=map.values();
        Iterator<String> it2=collection.iterator();
        while(it2.hasNext()) {
            System.out.println(it2.next());
        }
    }
    

    }

    运行结果:

    小米
    1
    2
    3
    小米
    苹果
    谷歌
    

    (二)

    新建Type类

    package com.zang.map;
    
    public class Type {
    
    private int id;
    private String name;
    public Type(int id,String name) {
        this.id=id;
        this.name=name;
    }
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
      }
    }
    

    Map_Main类:

    package com.zang.map;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
    
    public class Map_Main {
    
    public static void main(String[] args) {
    
        Map<Object,String> hashMap=new HashMap<>();
        
        Type type1=new Type(1, "Java");
        Type type2=new Type(2, "Kotlin");
        Type type3=new Type(0, "Android");
        Type type4=new Type(3, "iOS");//需要移除的元素
        
        hashMap.put(type1.getId(),type1.getName());
        hashMap.put(type2.getId(),type2.getName());
        hashMap.put(type3.getId(),type3.getName());
        hashMap.put(type4.getId(),type4.getName());//需要移除的元素
        
        hashMap.remove(3);
        
        Set<Object> set=hashMap.keySet();
        Iterator<Object> iterator=set.iterator();
        
        while(iterator.hasNext()) {
            int id=(int)iterator.next();
            String name=hashMap.get(id);    
            System.out.println(id+" "+name);
        }
        
        //TreeMap接口
        Map<Object,String> treeMap=new TreeMap<>();
        treeMap.putAll(hashMap);
        
        //一步到位
        Iterator<Object> iterator2=treeMap.keySet().iterator();
        
        while(iterator2.hasNext()) {
            int id=(int)iterator2.next();
            String name=treeMap.get(id);    
            System.out.println(id+" "+name);
        }
    }
    
    }
    

    运行结果:

    0 Android
    1 Java
    2 Kotlin
    0 Android
    1 Java
    2 Kotlin
    

    常用方法:
    List

    add();//添加
    remove();//删除
    isEmpty();//返回boolean,判断集合为空否
    iterator();//遍历集合
    size();
    get(index);//获取value
    set(index,new value);//更改数据
    

    Map

    put(Key,Value);//
    get(Object key);//如果存在该key,返回对应value,否则返回null
    keySet();//返回所有key形成的Set集合
    values();//返回所有value形成的Collection集合
    containKey();//如果该集合包含括号里的key,返回ture;
    containValue();//如果该集合包含括号里的value,返回ture;

    相关文章

      网友评论

          本文标题:Java集合类(一)

          本文链接:https://www.haomeiwen.com/subject/eixmsxtx.html