javaSE集合

发布于:2022-12-08 ⋅ 阅读:(710) ⋅ 点赞:(0)

1.集合

1.1集合体系

  Collection: 单列集合顶层接口,集合中一次只能存取一个元素
         List: 有序(存储和遍历的顺序一致),有索引,元素可以重复
                 ArrayList: 1.底层结构是数组,查询快,增删慢; 2.线程不安全,效率高;
                 LinkedList: 1.底层数据结构是链表,查询慢,增删快; 2.线程不安全,效率高;
        Set: 无序(存储和遍历的顺序不一致),无索引,元素不可以重复
                HashSet: 底层是hash表.
                LinkedHashSet: 底层是"链表+hash表",是Set集合体系中唯一有序的集合.
                TreeSet: 底层是树形结构
Map: 双列集合顶层接口,集合中一次存取一对元素,元素必须成对出现
       HashMap: 键的底层是hash表.HashMap的键就是HashSet.
             LinkedHashSet: 键的底层是"链表+hash表",是Map集合体系中唯一有序的集合.
            TreeMap: 键的底层是树形结构.TreeMap的键就是TreeSet.

1.2 Collection集合

        概念: 是单例集合的顶层接口,集合中一次只能存取一个元素
        方法:
                    public boolean add(E e)        //添加元素
                    public boolean remove(Object o)        //从集合中移除指定的元素
                    public boolean removeif(Object o)    //根据条件进行删除
                    public void clear()            //清空集合
                    public boolean contains(Object o)    //判断集合中是否存在指定的元素
                    public boolean isEmpty()        //判断集合是否为空
                    public int size()            //集合的长度,也就是集合中元素的个数

1.31 迭代器

        介绍:    迭代器又名遍历器,专门用于集合的遍历
        获取: 
            Iterator<E> it = 集合对象.iterator(): 
        使用:
            public boolean hasNext():  //判断是否有下一个元素
            public E next():     //从集合中获取下一个元素
            public void remove(); //删除正在遍历的当前元素(指针指谁删谁)
        注意:
            1.当使用迭代器进行遍历的时候,不允许对原始集合进行了添加或删除,如果非要删除,只能通过迭代器进行删除.
            2.一个迭代器对象只能使用一次,如果想再次遍历,就重新获取迭代器对象.

1.32增强for

        概述: 增强for是专门用来遍历"集合和数组". 增强for遍历集合时,底层是"迭代器". 增强for遍历数组时,底层是"普通for循环".
        格式: 
            for(数据类型 变量名 : 集合或数组){
                //变量中记录的就是"集合或数组中的每个元素"
            }
        注意:
            使用增强for循环遍历集合时,不允许对原始集合进行"添加或删除"

2.List集合

        2.1 相关概述

                概述: List集合"有序(存取一致),有索引,元素可以重复".
                子类:
                    ArrayList: 底层是数组,查询快,增删慢.
                    LinkedList: 底层是链表,查询慢,增删快.

        2.2 特有方法

                public void add(索引位置, 新元素);    //把元素"插入"到指定索引位置处.
                public 元素 remove(索引位置);    //删除指定索引位置上的元素,把被删除的元素返回
                public 旧元素 set(索引,新元素);    //把指定索引位置上的旧元素替换为新元素,返回被替换的旧元素
                public 元素 get(索引位置);    //获取指定索引位置上的元素

2.3 LinkedList(了解)

        概述: 底层是"链表",所以"查询慢,增删快".
        方法:
           public void addFirst(元素) //把元素添加到开头
            public void addLast(元素)  //把元素添加到末尾
            public 元素 removeFirst()  //删除开头的元素,并返回被删除的元素
            public 元素 removeLast()      //删除末尾的元素,并返回被删除的元素
            public 元素 getFirst()      //获取开头的元素
            public 元素 getLast()      //获取末尾的元素

3.Set集合

3.1 相关概述

        概述: Set集合"无序,无索引,元素不可以重复".
        子类:
            TreeSet: 要求元素必须"排序".
            HashSet:要求元素必须"重写hashCode和equals方法".

3.2 TreeSet元素排序

① 自然排序

       概述: 所谓的自然排序,指的是"元素本身能排序"
        步骤:
            1.让元素所在的类,实现Comparable接口
            2.重写compareTo方法
            3.在compareTo方法中书写排序规则
                3.0:方法中的this代表"新添加元素",方法中的参数代表"集合已有元素"
                3.1:如果方法返回值是正数,则表示"新添加元素"比"集合已有元素"大,所以"新添加元素"放在右边.
                3.2:如果方法返回值是0,则表示新添加元素"和"集合已有元素"相同.所以不添加"新元素"
                3.3:如果方法返回值是负数,则表示"新添加元素"比"集合已有元素"小,所以"新添加元素"放在左边. 

② 比较器排序

        概述: 所谓的比较器排序,指的是"元素本身不要求排序,别人制定排序规则".
        步骤:
            1.创建TreeSet集合时,给构造方法传递"排序规则Comparator"
            2.需要重写compare方法
            3.在compar方法中书写排序规则
                3.0:方法有两个参数,参数1代表"新添加元素",参数2代表"集合已有元素"
                3.1:如果方法返回值是正数,则表示"新添加元素"比"集合已有元素"大,所以"新添加元素"放在右边.
                3.2:如果方法返回值是0,则表示新添加元素"和"集合已有元素"相同.所以不添加"新元素"
                3.3:如果方法返回值是负数,则表示"新添加元素"比"集合已有元素"小,所以"新添加元素"放在左边.

3.3 TreeSet排序注意事项

        1.如果"自然排序"和"比较器排序"同时存在,则遵循"比较器排序".
        2.自己写的类推荐"自然排序",别人写的类推荐"比较器排序".

3.4HashSet

        概述: HashSet是Set集合的子类.集合"无序,无索引,元素不可以重复".HashSet的底层是"哈希表".
        要求:
           HashSet中存储的数据,必须重写"hashCode"和"equals"方法,不然无法去重.
        补充:
            LinkedHashSet是HashSet的子类,是Set集合唯一有序的集合.

4.Map<K,V>

4.1 基本概述

        概述: Map集合是双列集合. 所谓的双列集合,就是,存和取的时候,必须一对一对的操作.
        注意:
            1.泛型中,K表示键的类型,V表示值的类型.
            2.Map中的键,无序,且不可以重复. Map中的值不做要求.
            3.Map中的键和值必须一一对应.
            4.键+值,称之为一个键值对,也可以叫做Entry对象.

4.2 成员方法

        基本方法:
            public void put(键, 值);        //添加/覆盖. 如果键不存在就是添加,如果键存在就是覆盖.
            public 值 remove(键);            //根据键删除"键值对",把值返回.   
            public void clear();          //清空整个集合
            public boolean containsKey(键);    //判断集合中是否包含指定的"键"
            public boolean containsValue(值);//判断集合中是否包含指定的"值"
            public boolean isEmpty();    //判断是否为空
            public int size();            //获取集合元素个数(键值对的对数)
        获取方法:
            public 值 get(键);                       //根据键获取值.
            public Set<K> keySet();                     //获取所有的"键"
            public Set<Map.Entry<K,V>> entrySet();    //根据所有的"键值对"

4.3集合遍历

① 根据键获取值

Map<String, String> map = new HashMap<>();
map.put("1号丈夫", "1号妻子");
map.put("2号丈夫", "2号妻子");
map.put("3号丈夫", "3号妻子");
map.put("4号丈夫", "4号妻子");
map.put("5号丈夫", "5号妻子");

//1.获取到所有的键
Set<String> keys = map.keySet();
//2.遍历Set集合得到每一个键
for (String key : keys) {
    //3.通过每一个键key,来获取到对应的值
    String value = map.get(key);
    System.out.println(key + "---" + value);
}

② 键值对获取键和值

Map<String, String> map = new HashMap<>();
map.put("1号丈夫", "1号妻子");
map.put("2号丈夫", "2号妻子");
map.put("3号丈夫", "3号妻子");
map.put("4号丈夫", "4号妻子");
map.put("5号丈夫", "5号妻子");

//1.首先要获取到所有的键值对对象。
Set<Map.Entry<String, String>> entries = map.entrySet();
//2.遍历,得到每一个键值对对象
for (Map.Entry<String, String> entry : entries) {
       //3.从每个键值对对象获取"键"和"值"
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + "---" + value);
}

4.3 Map子类

        HashMap: HashMap的键就是"HashSet".所以,HashMap的键要求"重写HashCode和equals方法".
        TreeMap: TreeMap的键就是"TreeSet".所以,TreeMap的键要求"排序"

本文含有隐藏内容,请 开通VIP 后查看

微信公众号

今日签到

点亮在社区的每一天
去签到