【博学谷学习记录】超强总结,用心分享。集合体系结构。

集合

  1.集合的结构体系图

   

 

 

     注:红色为实现类,蓝色为接口

  2.结构特点

    1)Collection是单列集合,其中,List的元素是可以重复的,但是Set的元素不可以重复

    2)Map是双列集合。

  3.Collection集合常用方法

package com.study.collectionDemo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class Demo1 {
    public static void main(String[] args) {
        //集合的方法
        /*
            boolean add(E e) 添加元素
            boolean remove(object o) 从集合中移除指定的元素
            boolean removeif(object o) 根据条件删除 结合lambda判断
            void clear() 清空集合
            boolean contains(Object o)判断集合中是否存在指定的元素
            boolean isEmpty() 判断集合是否为空
            int size() 集合的长度,也就是集合中的元素
         */
        //建立集合
    //添加元素
       Collection<String> collection=new ArrayList<>(); collection.add("aaa"); collection.add("bbb"); collection.add("ccc"); System.out.println(collection);//[aaa, bbb, ccc]
    //从集合中删除元素 boolean result=collection.remove("aaa"); boolean result1=collection.remove("dddd"); System.out.println(result);true System.out.println(result1);false System.out.println(collection);[bbb, ccc]
    //根据条件删除,结合Lambda判断 collection.removeIf((String s)->{ return s.length()==3; }); System.out.println(collection);
    //清空集合 collection.clear(); System.out.println(collection);
    //判断元素内是否包含元素 boolean re1=collection.contains("aaa"); boolean re2=collection.contains("cccc"); System.out.println(re1);//true System.out.println(re2);//false
    //判断集合是否为空 boolean re3=collection.isEmpty(); System.out.println(re3);//false
    //查看元素长度大小 int size = collection.size(); System.out.println(size);//3 } }

  4.Collection集合的遍历

    Iterator迭代器,集合的专用遍历方式

  格式为 Iterator<E> iterator():返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引

    Iterator中的常用方法

  boolean hasNext():判断当前位置是否有元素可以被取出

  E next():获取当前位置的元素,将迭代器对象移向下一个索引位置

package com.study.collectionDemo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo2 {
    public static void main(String[] args){
        Collection<String> list=new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        System.out.println(list);
        Iterator<String> iterator=list.iterator();
        //返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引
        //利用迭代器里面的方法进行遍历
        System.out.println(iterator.hasNext());
        //取出当前位置的元素 将迭代器往后移动一个索引的位置
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

   5.Collection集合的第二种遍历方式:增强for

    增强for:简化数组和Collection集合的遍历

     它是JDK5之后出现的,其内部原理是一个Iterator迭代器,实现Iterator接口的类才可以使用迭代器和增强for。

    实现格式:

      for(元素数据类型 变量名 : 数组或者Collection集合){}

      范例:

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

      for(String s:list){system.out.println(i);}

      注意:修改第三方变量的值不会影响到集合中的元素,如范例中的变量名S

   6.三种循环的使用场景

    1.如果需要操作索引,使用普通for循环

    2.如果在遍历的过程中需要删除元素,使用 迭代器

    3.如果仅仅想遍历,那么使用增强for

List

  1.List集合的特点

    1)有序:存储和取出的元素顺序一致

    2)有索引:可以通过索引操作元素

    3)可重复:存储的元素可以重复

  2.List集合特有方法

    

方法名

说明

void add(int index,E element)

在此集合中的指定位置插入指定的元素

E remove(int index)

删除指定索引处的元素,返回被删除的元素

E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

E get(int index)

返回指定索引处的元素

  3.List集合常用实现类 

    ArrayList集合底层数据结构是数组,查询快,增删慢

    LinkedList:底层数据结构是链表,查询慢,增删快

 

 

   4.LinkedList集合的特有功能 

package com.study.mylistDemo;

import java.util.LinkedList;

public class Demo1 {
    public static void main(String[] args) {
    //LinkList的特有功能
    LinkedList<String> list=new LinkedList<>();
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    //public void addFirst(E e) 在该列表开头插入指定的元素
        list.addFirst("QQQ");
        System.out.println(list);//[QQQ, aaa, bbb, ccc]
    //public void lastFirst(E e) 在该列表末尾插入指定的元素
        list.addLast("zzz");
        System.out.println(list);//[QQQ, aaa, bbb, ccc, zzz]
        //public e getFirst()返回此列表中第一个元素
        String first = list.getFirst();
        //public e getLast()返回此列表中最后一个元素
        String last= list.getLast();
        System.out.println(first);
        System.out.println(last);
        //public e removeFirst() 删除第一个
        String s = list.removeFirst();
        //public e removeLast() 删除z最后一个个
        String s1= list.removeLast();
        System.out.println(s);
        System.out.println(s1);
    }
}

Set集合

    1.Set集合的特点

      1)可以去除重复

      2)存取顺序不一致

      3)没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取,删除Set集合里面的元素

    2.TreeSet集合特点

      1)不包含重复元素的集合

      2)没有带索引的方法

      3)可以将元素按照规则进行排序

    如果想要使用TreeSet需要定制排序规则

    3.自然排序Comparable的使用

      1)使用空参构造创建TreeSet集合

      2)自定义的Student类实现Comparable接口

      3)重写里面的compareTo方法

      4)自然排序简单原理图

        如果返回值为负数,表示当前存入的元素是较小值,存左边。

        如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存

        如果返回值为正数,表示当前存入的元素是较大值,存右边

    4.比较器排序Comparator的使用

      1)TreeSet的带参构造方法使用的是比较器排序对元素进行排序

      2)比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(To1,To2)方法

      3)重写方法时,一定要注意排序规则必须按照要求的主要和次要条件来写

 

    5.两种比较方法的小结

      1)自然排序:自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序

      2)比较器排序:创建TreeSet对象的时候传递Comparator方法,根据返回值进行排序

      3)在使用的时候,默认使用自然排序,当自然排序不满足闲杂的需求,使用比较器排序

      

    6.两种方式中,关于返回值的规则

      1)如果返回值为负数,表示当前存入的元素是较小值,存左边

      2)如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存

      3)如果返回值为正数,表示当前存入的元素是较大值,存右边

    7.HashSet集合的特点

      1)底层数据结构是哈希表

       2)对集合的迭代顺序不作任何保证,也就是说,不保证存储和取出的元素顺序一致

       3)没有带索引的方法,所以不能使用普通for循环遍历

       4)由于是Set集合,所以元素是不重复的。

    8.哈希值

      哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

      1)Object类中有一个方法可以获取对象的哈希值

        public int hashCode():返回对象的哈希码值

      2)对象的哈希值特点

        同一个对象多次调用hashCode()方法返回的哈希值是相同的

        默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

      3)总结

        

 

 

 

Map

  1.Map集合的概述和使用

    1)单例集合一次存一个元素,双列集合一次存两个元素

    2)双列元素中的键是不能重复的,值是可以重复的

    3)Interface Map<K,V> K:键的数据类型  V:值的数据类型

    4)键和值是一一对应的,每个键只能找到自己对应的值

    5)(键+值)这个整体我们称之为键值对,或者键值对对象,在Java中叫做Entry对象

  2.创建Map集合的对象

    1)多态的方式

    2)具体实现类HashMap

  3.Map集合的基本功能

    

package com.study.mymap;

import java.util.HashMap;
import java.util.Map;

public class Demo1 {
    //map的基本使用
    public static void main(String[] args) {
        //创建集合对象
        Map<String,String> map=new HashMap<String,String>();
        //v put(K key,V value):添加元素
        map.put("aa","11");
        map.put("bb","22");
        map.put("cc","33");
        map.put("dd","44");
        System.out.println(map);

        //V remove(object key):根据键删除键值对元素
        System.out.println(map.remove("aa"));//有就返回删除完之后对应的值
        System.out.println(map.remove("qq"));//没有就返回null

        //void clear():移除所有的键值对元素
        //        map.clear();

        //boolean containsKey(Object key):判断集合是否包含指定的键
        //        System.out.println(map.containsKey("郭靖"));
        //        System.out.println(map.containsKey("郭襄"));

        //boolean isEmpty():判断集合是否为空
        //        System.out.println(map.isEmpty());

        //int size():集合的长度,也就是集合中键值对的个数
//        System.out.println(map.size());
    }
}

  

    4.Map集合的获取功能  

package com.study.mymap;

import com.sun.source.doctree.SeeTree;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo2 {
    public static void main(String[] args) {
        //Map集合的获取功能
        Map<String,String> map=new HashMap<String, String>();

        //添加元素
        map.put("aa","11");
        map.put("bb","22");
        map.put("cc","33");
        map.put("dd","44");

        //V get(Object key):根据键获取值
//        System.out.println(map.get("aa"));11
//        System.out.println(map.get("qq"));null
        //Set<K> keySet():获取所有键的集合
        Set<String> keySet=map.keySet();
        for (String s : keySet) {
            System.out.println(s);
        }
        //Collection<V> values():获取所有值的集合
        Collection<String> values= map.values();
        for (String value : values) {
            System.out.println(value);
        }
    }
}

  5.Map的遍历方式一

package com.study.mymap;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo3 {
    /*
  - 我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
    - 把所有的丈夫给集中起来
    - 遍历丈夫的集合,获取到每一个丈夫
    - 根据丈夫去找对应的妻子
- 步骤分析
  - 获取所有键的集合。用keySet()方法实现
  - 遍历键的集合,获取到每一个键。用增强for实现
  - 根据键去找值。用get(Object key)方法实现
     */
    public static void main(String[] args) {
        //创建集合对象
        Map<String,String> map=new HashMap<String, String>();
        //添加元素
        map.put("aa","11");
        map.put("bb","22");
        map.put("cc","33");
        map.put("dd","44");
        //根据键找值,用keySet()
        Set<String> keySet=map.keySet();
        for (String s : keySet) {
            //根据键去找值,用get(Object key)方法实现
            String value= map.get(s);
            System.out.println(s+","+value);
        }
    }
}

  

    6.Map集合遍历方式二:根据键值对对象获取键和值

   

package com.study.mymap;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo4 {
    /*    - 获取所有键值对对象的集合
    - Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
  - 遍历键值对对象的集合,得到每一个键值对对象
    - 用增强for实现,得到每一个Map.Entry
  - 根据键值对对象获取键和值
    - 用getKey()得到键
    - 用getValue()得到值
     */
    public static void main(String[] args) {
        Map<String,String>map=new HashMap<String, String>();
        map.put("aa","11");
        map.put("bb","22");
        map.put("cc","33");
        map.put("dd","44");

        //获取所有键值对对象的集合
        Set<Map.Entry<String, String>> entries = map.entrySet();
        //遍历键值对对象,得到每一个键值对对象
        for (Map.Entry<String, String> entry : entries) {
            String key= entry.getKey();
            String value=entry.getValue();
            System.out.println(key+"...."+value);
        }

    }
}

    7.HashMap的特点

      1)HashMap是Map里面的一个实现类

      2)没有额外需要学习的特有方法,直接使用Map里面的方法就可以了

      3)HashMap跟HashSet一样底层是哈希表结构

      4)依赖hashCode方法和equals方法保证键的唯一

      5)如果键要存储的是自定义对象,需要重写hashCode方法和equals方法

    8.TreeMap的特点

      1)TreeMap是Map里面的一个实现类

      2)没有额外需要学习的特有方法,直接使用Map里面的方法就可以

      3)TreeMap和TreeSet一样底层是红黑树结构的

      4)依赖自然排序或者比较器排序,对键进行排序

      5)如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则

 

    9.可变参数

      

 

    10.不可变集合

      

 

 

 总结

    对集合的体系结构知识的总结,方便自己对知识点的梳理。

 

    

     

 

 

 

 

 

 

 

 

 

 

 

 

 

package com.study.mymap;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo4 {
/* - 获取所有键值对对象的集合
- Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
- 遍历键值对对象的集合,得到每一个键值对对象
- 用增强for实现,得到每一个Map.Entry
- 根据键值对对象获取键和值
- getKey()得到键
- getValue()得到值
*/
public static void main(String[] args) {
Map<String,String>map=new HashMap<String, String>();
map.put("aa","11");
map.put("bb","22");
map.put("cc","33");
map.put("dd","44");

//获取所有键值对对象的集合
Set<Map.Entry<String, String>> entries = map.entrySet();
//遍历键值对对象,得到每一个键值对对象
for (Map.Entry<String, String> entry : entries) {
String key= entry.getKey();
String value=entry.getValue();
System.out.println(key+"...."+value);
}

}
}
posted @ 2022-07-31 20:01  LINwenguan  阅读(4)  评论(0编辑  收藏  举报