• 集合类Collection Map


     数组与集合的区别:数组虽然也可以存储对象,但长度是固定的;集合的长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。

    集合特点:1、用于存储对象;

           2、长度可变;

                     3、可存储不同对象;

    一、Collection

    ArrayList<Object> list=new ArrayList<Object>();

        list.add("A");//添加对象A;

                list.add(index,A);//在角标index位置上插入对象 A;

                list.addAll( 集合); //在list里面加入集合;

                list.clear();清除集合所有

                boolean b=list.contain(a);返回指定角标的值(获取集合里的元素)

                list.remove(a);删除角标为a的元素

                list.is Empty;空集就返回true;

                int index=list.indexOf(a);返回在集合里首次出现a的角标,没有就返回-1;

                list.set(index,a);将指定元素a替代列表中角标为index的元素

                list.size();集合里对象数

                list.retainAll(list1);//取两个集合的交集,list里面只保留交集。

    迭代器:

    I    terator it = list1.iterator();

        system.out.println(it.next());// 返回一个元素,从第一个元素开始返回

        while(it.hasNext()){//获取迭代器,取出集合里面的元素

        System.out println(it.next)

    }

    反向迭代遍历集合里的元素:

      while(it.hasprevious()){

        System.out.println(it.previous);

    }

     Arraylist: 底层的数据结构使用的是数组

      特点:查询速度快,删减慢;

    linkList:

    linkList:底层链表数据结构

    特点:删减快,查询速度慢。

    LinkedList link  = new LinkedList();

    addFirst();从前面开始添加

    addlast();从后面开始添加元素

    link.getFirst(); 获取第一个元素;如果没有元素会出现NoSuchElementException异常

    link.getLast());获取最后一个元素

    link.removeFirst()获取第一个元素并删除;如果没有元素会出现NoSuchElementException异常

    link.removeLast();获取最后一个元素并删除

    link.offerFirst()从前面开始添加
    link.offerLast(); 从后面开始添加
    获取元素,但不删除元素,如果集合中没有元素,会返回null
    link.peekFirst();
    link.peekLast();
     获取元素,但是元素被删除,如果集合中没有元素,会返回null
     link.pollFirst();

    link.remove()//链表集合为空,抛出异常

    link.poll()//链表集合为空,返回null;

    collections.sort()按自然顺序排列

    vector:

    底层是数组数据结构。和ArrayList一样,区别:线程同步
    枚举是vector特有的取出方式,不是通用的,已被取代;

    Set接口:

    Hashset:

    是无序的,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法

    TreeSet:

    可以对Set集合里面进行排序; 底层数据是:二叉树,保证元素唯一行的依据。

    public static void main(String[] args) {
        TreeSet<String> tr = new TreeSet<String>();

        tr.add("cba");
        tr.add("abcd");
        tr.add("aaa");
        tr.add("bca");
        tr.add("Aca");
        Iterator<String> it = tr.iterator();
        while(it.hasNext()){    
            System.out.println(it.next());
        }
        //输出:
        //      Aca
        //      aaa
        //      abcd
        //      bca
        //      cba
    }

    排序的方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法。也称之为元素的自然顺序,或者也可以称之为默认顺序。

    TreeSet集合的第二种比较方式

    当元素自身不具备比较性时,或者具备的比较性不是所需要的,集合需要具备比较性。

    public class MyCompare implements Comparator{
    @Override
    public int compare(Object o1, Object o2) {
        // TODO Auto-generated method stub
        Student s1 = (Student)o1;
        Student s2 = (Student)o2;
        int num = s1.getName().compareTo(s2.getName());//先比较名字
        if(num == 0){//如果名字相等
             if(s1.getAge() > s2.getAge()){//比较年龄
                return 1;
            }else if(s1.getAge() == s2.getAge()){
                return 0;
            }
            return -1;
        }
        return num;
    }
    }

    public class TreeSetDemo {

    public static void main(String[] args) {
        TreeSet<Student> tr = new TreeSet<Student>(new MyCompare());
        tr.add(new Student("zhangsan01",40));
        tr.add(new Student("zhangsan02",21));
        tr.add(new Student("zhangsan003",22));
       
       
        Iterator<Student> it = tr.iterator();
        while(it.hasNext()){
            Student stu = it.next();
            System.out.println(stu.getName()+"......"+stu.getAge());
        } 
        }
    }  

    map

    Map集合:该集合存储键值对,是一对一对的存储,注意:保证键值的唯一性。

    put(K key, V value)\添加

    clear()清除

    判断:containsValue(Object value)
    containsKey(Object key)
    isEmpty()

    get(key) //
    values()//

    keySet()//获取KEY集合

    Map的子集合

    Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。
    HashMap:底层是哈希表数据结构,允许存入null键null值,该集合是不同步的。
    TreeMap:底层是二叉树数据结构,线程不同步。可以用于给map集合里面的键进行排序。

    map集合中两种取出方式:

    1、keyset:将map中所有的键存入set集合,因为set具备迭代器,所以可以迭代方法取出所有的键,再根据get方法获取每一个键对应的值

    HashMap<String,String> hm = new HashMap<String,String>();
       hm.put("01", "zhang1");
       hm.put("02", "zhang2");
       hm.put("03", "zhang3");
       hm.put("04", "zhang4");
        //先获取map集合的所有键的set集合,keyset()
        Set<String>  set = hm.keySet();
        //有了set集合就可以获取其迭代器
        Iterator<String>  it = set.iterator();

       while(it.hasNext()){
            String key = it.next();
            //有了键我们就可以通过map集合的get方法获取其对应的值
            String value = hm.get(key);
            System.out.println("key = "+key+"  value = "+value);
           
        }  
    Map集合的取出原理:将map集合专程set集合,再通过迭代器取出

    2、entrySet() :将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是Map.Entry.其实Entey也是一个接口,它事Map接口中的一个内部接口。

  • 相关阅读:
    Java Proxy和CGLIB动态代理原理
    Nginx限速模块初探
    200行Java代码搞定计算器程序
    深入理解Java内置锁和显式锁
    使用linux perf工具生成java程序火焰图
    《深入理解Java函数式编程》系列文章
    Java原子变量
    Java Stream API性能测试
    深入理解Java Stream流水线
    对于web前端基础学习的复习总结
  • 原文地址:https://www.cnblogs.com/tanghao666/p/7157600.html
Copyright © 2020-2023  润新知