Map与Set

作者: 啦啦啦_9a5f | 来源:发表于2018-12-19 10:45 被阅读0次

    一、Set接口的特点

    使用HashSet存储字符串并遍历

    Set<String> set = new HashSet<String>();//父接口引用指向子类对象

    //添加元素对象

    set.add("hello");

    set.add("world");

    set.add("java");

    //遍历集合对象

    //Colleaction三种:转数组、迭代器、foreach,List有四种,由于List是有序的,多了一种索引,Set也是三种,Set没有索引

    1.转数组

    Object[] obj = set.toArray();
    for(int i = 0;i < obj.length;i++){
      System.out.println(obj[i]);
    }

    2.迭代器

    Iterator<String> it = set.iterator();
    while(it.hasNext()){
      String s = it.next();
      System.out.println(s);
    }

    3. 增强for

    for(String s : set){
      System.out.println(s);
    }

    4.Set集合的特点:

    (1)无序(存储和读取的顺序有可能不一样)

    (2)不允许重复(要求元素唯一)

    (3)没有索引,因为没有顺序

    5.HashSet中add()方法不能去重的原因:

    HashSet()的add()方法,首先会使用当前集合中的每个元素和新添加的元素进行hash值比较

    如果hash值不一样,直接添加新的元素

    如果hash值一样,比价地址值或者使用equals方法进行比较

    比较结果一样,则认为是重复不添加

    送油的比较结果不一样则添加。

    由于创建自定义对象时,传的参数是地址值,每个地址值都不同,即使对象的属性一致,也会添加进LinkedList

    6.重写hashCode()和equals()方法实现HashSet存储自定义对象去重

    (1)根据新添加的元素的hashCode()返回值计算出hash值

    (2)先比较hash值,hash值不一样if语句结束

    (3)如果hash值一样,则比较地址或者使用equals方法进行比较

    (4)由此可以看出先重写hashCode()使hash值一致,在重写equals()比较对象中属性值。

    二、Collections

    1.面试题:Collection和Collections的区别:

    (1)Collection是集合体系的最顶层,包含了集合体系的共性

    (2)Collections是一个工具类方法都是用于操作Collection

    2.Collections的常用方法

    (1)static int binarySearch(List list, Object key)//使用二分查找指定元素在指定列表的索引位置,List是有序的

    List<Integer> list = new ArrayList<Integer>();
    list.add(1);//JDK1.5特性自动装箱
    list.add(2);
    list.add(3);
    list.add(4);
    int index = Colleaction.binarySearch(list,4);

    (2)static void copy(List dest, List src):把源列表的数据覆盖到目标列表

    List<String> src = new ArrayList<String>();
    src.add("hello");
    src.add("world");
    src.add("java");
    List<String> dest = new ArrayList<String>();
    dest.add("");
    dest.add("");
    dest.add("");
    Collections.copy(dest,src);

    注意:目标列表的长度至少等于源列表的长度

    (3)static void fill(List list, Object obj):使用指定对象填充指定列表的所有元素

    List<String> list = new ArrayList<String>();
    list.add("hello");
    list.add("world");
    list.add("java");
    Colleactions.fill(list,"android");

    (4)static void reverse(List list)

    List<String> list = new ArrayList<String>();
    list.add("hello");
    list.add("world");
    list.add("java");
    Colleactions.reverse(list);

    (5)static void shuffle(List list):使用指定的随机源对指定列表进行置换

    (6)static void sort(List list):根据元素的自然顺序对指定列表按升序进行排序。

    (7)static void swap(List list, int i, int j):在指定列表的指定位置处交换元素。

    三、Map接口

    为了提现有对应关系的数据,Java提供了一种专门用于存储对应关系的集合。

    Map<K,V>:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值

    1.Map和Collection 的区别

    Map:是一个双列集合,常用语处理有对应关系的数据,key是不可以重复的,称之为夫妻集合

    Colleaction:是单列集合,Collection有不同的字体系,有的允许重复有索引有序,有的不允许重复且无序,称之为单身汉集合

    2.Map的常用功能:

    Map<String,String> map = new HashMap<String,String>();

    (1)映射功能:

    V put (K key,V value)//就是将key映射到value,如果key存在,则覆盖value,并将原来的value返回

    System.out.println(map.put("001","zhangsan"));
    System.out.println(map.put("001","wangwu"));
    输出:null  zhangsan

    (2)获取功能:

    V get(Object key)

    Set<K> keySet()

    Collection<V> values()

    int size()

    System.out.println(map.size());//返回对应关系的个数
    输出结果:2
    System.out.println(map.get("001"));//根据指定的key返回对应的value
    map.put("001","zhangsan");
    map.put("002","lisi");
    (map.put("003","wangwu"));
    Set<String> keys = map.keySet();
    for(String key : keys){
      System.out.println(key);
    }
    输出结果:001
                  002
                  003
    map.put("001","zhangsan");
    map.put("002","lisi");
    (map.put("003","lisi"));
    Colleaction<String> values = map.values();
    for(String value : values){
      System.out.println(value);
    }
    输出结果:zhangsan
                  lisi
                  lisi

    (3)判断功能

    boolean containsKey(Object key)

    boolean containsValue(Object value)

    boolean isEmpty()

    System.out.println(map.containsKey("001"));
    输出结果:true
    System.out.println(map.containsVaule("zhangsan"));
    输出结果:false
    System.out.println(map.isEmpty());
    输出结果:false

    (4)删除功能

    void clear()

    v remove(Object key)

    map.clear();//清空所有的对应关系
    System.out.println(map.remove("001"));//根据指定的key删除对应关系,并返回key所对应的值,如果没有删除成功返回null
    输出结果:wangwu

    (4)遍历功能:

    Map的第一种遍历方式:

    先找到所有的key,遍历所有的key,获取每一个key,去找key对应的value

    map.put("001","zhangsan");
    map.put("002","lisi");
    (map.put("003","wangwu"));
    Set<String> keys = map.keySet();
    for(String key : keys){
      String value = map.get(key);
    }

    Map的第二种遍历方式:

    Set<Map.Entry<K,V>> entrySet()

    Entry是Map中的内部类

    Set<Map.Entry<String,String>> entrys = map.entrySet();
    for(Map.Entry<String,String> entry: entrys){
    String key = entry.getKey(); 
    String value = entry.getValue();
    }

    相关文章

      网友评论

          本文标题:Map与Set

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